我一直在编写一个存储过程。但是现在我不确定我是否做得很好。我有这样的代码:带有多个更新的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