您的基本SP用默认参数来完成:已知问题?:SQL Server 2005的存储过程失败,出现一个参数
ALTER PROCEDURE [usp_debug_fails]
@DATA_DT_ID AS int = 20081130
WITH RECOMPILE
AS
BEGIN
/*
Usage:
EXEC [usp_debug_fails] WITH RECOMPILE
*/
-- Stuff here that depends on DATA_DT_ID
END
同一个SP与当地是硬编码。
ALTER PROCEDURE usp_debug_works]
WITH RECOMPILE
AS
BEGIN
/*
Usage:
EXEC [usp_debug_works] WITH RECOMPILE
*/
DECLARE @DATA_DT_ID AS int
SET @DATA_DT_ID = 20081130
-- Stuff here that depends on DATA_DT_ID
END
你可以看到我放在(冗余,即使)WITH RECOMPILE
选项,以避免参数嗅探(这是从来没有必要在发展,其中这件事情的罚款)
的作品完成了一个罚款一两分钟,另一方永远不会完成 - 只要坐在那里几个小时。
这个问题从来没有发生过的开发服务器(构建9.00.3282.00)上,生产服务器是建立9.00.3068.00
我已经去除了各种代码从特效,试图坐下来最小版本仍然存在问题,并且一直非常小心地保持SP的两个版本除了那一个参数以外都是相同的。
我有很多其他SPs采取参数,他们确实运行良好。我还有DROP
ped和re CREATE
编辑SP。
任何想法?
是的,我有一个DBA看着它,我没有SHOWPLAN或生产的任何有用的权利,看看是否有阻塞(如果一个人的计划导致锁升级我猜 - 再次,唯一的区别是参数)
我已经审查了所有的SQL Server构建信息,并没有看到有关这个的已知问题,所以直到我弄明白或者DBA将其计算出来时,我有点卡住了。
UPDATE
这也未能完成(这实际上是对这些SP的正常形态 - 我只是把默认的,使其更容易在测试过程中来回切换)
ALTER PROCEDURE [usp_debug_fails]
@DATA_DT_ID AS int
WITH RECOMPILE
AS
BEGIN
/*
Usage:
EXEC [usp_debug_fails] 20081130 WITH RECOMPILE
*/
-- Stuff here that depends on DATA_DT_ID
END
然而这一个完成(其可能工作作为一种解决方法,虽然我对这些SP的25修改其全部具有相同的形式):
ALTER PROCEDURE [usp_debug_fails]
@DATA_DT_ID_in AS int
WITH RECOMPILE
AS
BEGIN
/*
Usage:
EXEC [usp_debug_fails] 20081130 WITH RECOMPILE
*/
DECLARE @DATA_DT_ID AS int
SET @DATA_DT_ID = @DATA_DT_ID_in
-- Stuff here that depends on DATA_DT_ID
END
不要紧,默认值是什么?你可以去掉代码并逐个添加它以查看它何时锁定? – n8wrl 2008-12-18 19:59:08