您的基本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