2010-02-24 104 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