我通過獲取它們的定義並在其上運行ALTER語句來檢查現有存儲過程的有效性。使用EXEC()重新創建存儲過程沒有發現錯誤
我遇到的問題是,沒有編譯的任何存儲過程(因爲依賴已經消失)沒有被標記爲這樣。
如果我嘗試在SSMS中運行相同的ALTER命令,我會收到錯誤消息。 編輯:不,我不....
DECLARE @def nvarchar(MAX)
BEGIN TRY
-- refresh the stored procedure
SELECT @def = REPLACE(definition,'CREATE PROCEDURE ','ALTER PROCEDURE ')
FROM sys.sql_modules
WHERE ... -- selecting/limiting clause
EXEC (@def);
END TRY
BEGIN CATCH
PRINT 'Validation failed : ' + ERROR_MESSAGE()
END CATCH
我有什麼做的陷阱非編譯錯誤?由於
當你改變一個proc到底是什麼錯誤?您可能不應該看到問題,因爲SQL Server在創建特效時會執行延遲名稱解析(至少對於表)。 – DavidG
糟糕!我的錯誤 - SSMS將編譯存儲的procs缺少的依賴關係 - 它只會突出顯示缺少的項目,並帶有一個紅色的波浪線...... – radders
好的,現在投票結束它,因爲它是不可複製的。 – DavidG