我有一個更新兩個表的存儲過程。第一個表始終是相同的表,但是這取決於所傳入的一個參數的第二個表的變化。它是更有效的它寫成一個大procudure,這樣更新多個表的存儲過程
CREATE PROCEDURE MyBigProc
@id int
@param int,
@value1 int,
@value2 int
AS
BEGIN
SET NOCOUNT ON;
-- First table to update
UPDATE MyTable SET field1 = @value1 WHERE id = @id
-- Then choose which table to update based on @param
IF @param = 1
UPDATE MySecondTable SET field2 = @value2 WHERE id = @id
IF @param = 2
UPDATE MyThirdTable SET field2 = @value2 WHERE id = @id
END
或者我應該寫一爲每個表分別執行程序,然後從主程序中調用EXEC程序。
我想後者更靈活,比如說如果我想更新一個子表而不是主表?
換句話說,如果我把事情分開,那麼有可能第一次表更新通過,但第二次表更新失敗。如果第二次更新失敗,是否有辦法回滾第一次更新? – hgcrpd 2012-07-12 04:46:55
@hgcrpd肯定可以在嵌套的存儲過程中回滾更新。檢查此模板以瞭解如何完成它:http://stackoverflow.com/a/2074139/345490。非常簡單:所有特效都必須遵循相同的模板;每個proc在錯誤時回滾並重新確認(請參閱catch塊中的'raiserror'行)錯誤以通知調用者proc已發生錯誤,以便調用者在錯誤時也回滾。 – Icarus 2012-07-12 14:07:47