我一直在編寫一個存儲過程。但是現在我不確定我是否做得很好。我有這樣的代碼:帶有多個更新的SQL Server(t-sql)存儲過程
BEGIN
UPDATE tblPro
SET Email = @p_Email
WHERE ProID = @p_proId
UPDATE tblVisits
SET VisitBrief = 'CONFIRMED'
WHERE VisitID = @p_visitId
UPDATE Bookings
SET JobConfirmation = 1
WHERE BookingID = @p_bookingId
IF @@ROWCOUNT > 0
BEGIN
INSERT INTO tblView (ViewLogType)
VALUES ('Visit')
END
ELSE
PRINT 'WARNING: Insert Failed'
END
是更好地有@@ROWCOUNT > 0
每次更新後聲明只是爲了確保所有的語句被執行?
感謝意見
這取決於你。您當前使用的@@ rowcount僅計算受上次更新影響的行。 –
如果因爲目標行不存在而導致上一次更新失敗時需要插入一行,那麼您會這樣做,只有您知道這是否可行。這被稱爲* upsert *,在T-SQL中做這件事的方法是使用'MERGE'。 –
如果您擔心存儲過程的正確性,那麼我會首先將set nocount添加爲第一個語句之一。 – GuidoG