2010-02-24 103 views
3

我有一個存儲過程在SQL Server 2008上,除了一個int參數。它會調用其他存儲的特效並嵌套quires。sql server存儲過程超時並且查詢不超時,爲什麼?

我面臨的問題是當我從SQL服務器管理工​​作室運行過程時,它不執行並超時。

如果我在另一個SQL Server管理工作室單獨運行存儲過程中的查詢,它只是執行一切正常。

我無法調試問題。將不勝感激任何幫助/指針深入挖掘。

預先感謝(我執行PROC或查詢時期運用相同的憑證)。

回答

6

可能是parameter sniffing的情況。

嘗試將sproc參數分配給局部變量,然後使用sproc中的查詢中的參數。

例如

CREATE PROCEDURE [TestSproc] 
    @Param1 INTEGER 
AS 
BEGIN 
DECLARE @Param1_LOCAL INTEGER 
SET @Param1_LOCAL = @Param1 

SELECT Something 
FROM Somewhere 
WHERE SomeField = @Param1_LOCAL 
END 
+0

工程就像一個魅力。 我通過鏈接掃描 - 它解釋了我們有多種參數可能需要禁用參數嗅探。在我的情況下,這個SP總是運行一個參數範圍(1到8)。分配局部變量的技巧似乎有效,但不明白爲什麼? – dotnetcoder 2010-02-24 20:18:17

+0

它禁用參數嗅探,導致SQL Server根據統計信息找到「通用」(針對缺少更好的短語)執行計劃。 – AdaTheDev 2010-02-24 21:40:04