2015-11-17 49 views
0

我有一個很大的討厭的數據透視查詢,我通過ADO.NET從C#運行。我在2個地方和1個地方使用這個數據,但是我想要數據,但在另一個地方我只想要結構(沒有數據)。所以在查詢我在where子句中補充說:ADO.NET參數導致超時

1 = @test

所以在查詢,我只想表結構我設置@test 2和偉大工程。但是,在查詢中,我希望將數據設置爲1,但該查詢超時(5分鐘後)。如果我將sql拉入sql server並手動設置參數,它會在3分鐘後返回。如果我完全從我的C#應用​​程序中刪除1 = @test,它會在3分鐘內恢復正常。如果我在C#應用程序中硬編碼1 = 1,它會在3分鐘內恢復正常。

我還在這個查詢中添加了一個日期參數,並且工作得很好。

我的問題是,世界上有關@test參數可能會導致此超時發生?

有沒有辦法查看ADO.NET是否真的發送到SQL Server進行查詢?

+1

sql server默認超時時間少於3分鐘我猜這就是它計時的原因,考慮優化你的查詢,3分鐘太多時間 –

+0

SP和意外的超時時間可能是[*參數嗅探*](http ://blogs.technet.com/b/mdegre/archive/2012/03/19/what-is-parameter-sniffing.aspx) –

+0

Sql Server Profiler可以顯示服務器接收到的內容。 – Steve

回答

1

簡單的答案是修改實際的查詢,當你需要做一個結構只有它包含你的1 = @測試。這樣,將創建兩個單獨的查詢計劃,每個查詢類型一個,這兩個查詢計劃將針對其實際需要執行的查詢進行優化。

+0

是的,我覺得這是解決方法。這只是基本上爲了這個複製基本上整個查詢。看起來像SQL Server超越自我的東西。 – user441521