我有幾個我正在管理的數據庫,每個數據庫都需要一個特定存儲過程的副本。如何避免存儲過程中的T-SQL錯誤?
問題是,存儲過程將插入到除其中一個數據庫之外的所有數據庫的表中。對於那個數據庫,表是分區視圖,不可更新,我不需要插入。
我試圖做類似如下:
CREATE PROCEDURE st_doit AS
-- Do lots of other stuff...
IF(DB_NAME() <> 'db3') BEGIN
INSERT INTO mytable...;
END
試圖在db3
執行,因爲INSERT
語句的存儲過程時,我還得到一個錯誤信息,即使該數據庫中,插入不會實際執行。將INSERT
包含在TRY...CATCH
塊中也沒有幫助。
爲了便於維護,我真的很想避免在db3
有一個特殊的程序副本。通常,我不會在過程中使用像這樣的IF語句,但在這種特殊情況下,它確實是最好的解決方案,並且隨着時間的推移,它不會隨着時間的推移而成長爲一堆其他特殊情況。
那麼,如何強制SQL Server執行存儲過程,並且只有如果我實際嘗試插入到表中,會生成一個錯誤?
編輯:由於使用動態SQL對我來說有點太亂了,我的最終解決辦法是保持IF
塊作爲一個陷阱,但內db3
註釋掉這些塊。不理想,但有效。幸運的是,我不會經常改變這個SP,但我想要在每個數據庫中都有一個「完整的」副本。
哇,這很不幸。 :( – richardtallent 2011-01-14 20:46:36