使用@@RowCount 进行多次更新
Use @@RowCount for multiple updates
通常我有 usp_sp_Name_InsertOrUpdate
个存储过程
所以我的结构很简单:
UPDATE [TableName]
SET [Column] = @NewValue
WHERE ...
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO [TableName] ...
END
要恢复此操作,存储过程会查找更新,如果它没有更新任何内容 @@ROWCOUNT == 0
,那么它会继续执行 INSERT
语句,如果 @ROWCOUNT > 0
就停在那里。
我的问题是。如果我有多个 UPDATE
语句,例如:
UPDATE [TableName]
SET [Column] = @NewValue
WHERE ...
UPDATE [AnotherTableName]
SET [Column] = @NewValue
WHERE ...
如果第一个更新 returns @@ROWCOUNT > 0
但第二个 return 0
存储过程继续 INSERT
语句,因为 @@ROWCOUNT
只检测最后 UPDATE
查询。
是否有一些技巧可以知道是否有任何更新 return @@ROWCOUNT > 0
如果它不是最后一个?
你需要这样的东西
DECLARE @OLD_ROWCOUNT int;
UPDATE [TableName]
SET [Column] = @NewValue
WHERE ...
SET @OLD_ROWCOUNT = @@ROWCOUNT -- capture after the first UPDATE
UPDATE [AnotherTableName]
SET [Column] = @NewValue
WHERE ...
-- now you could use @@OLD_ROWCOUNT
通常我有 usp_sp_Name_InsertOrUpdate
个存储过程
所以我的结构很简单:
UPDATE [TableName]
SET [Column] = @NewValue
WHERE ...
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO [TableName] ...
END
要恢复此操作,存储过程会查找更新,如果它没有更新任何内容 @@ROWCOUNT == 0
,那么它会继续执行 INSERT
语句,如果 @ROWCOUNT > 0
就停在那里。
我的问题是。如果我有多个 UPDATE
语句,例如:
UPDATE [TableName]
SET [Column] = @NewValue
WHERE ...
UPDATE [AnotherTableName]
SET [Column] = @NewValue
WHERE ...
如果第一个更新 returns @@ROWCOUNT > 0
但第二个 return 0
存储过程继续 INSERT
语句,因为 @@ROWCOUNT
只检测最后 UPDATE
查询。
是否有一些技巧可以知道是否有任何更新 return @@ROWCOUNT > 0
如果它不是最后一个?
你需要这样的东西
DECLARE @OLD_ROWCOUNT int;
UPDATE [TableName]
SET [Column] = @NewValue
WHERE ...
SET @OLD_ROWCOUNT = @@ROWCOUNT -- capture after the first UPDATE
UPDATE [AnotherTableName]
SET [Column] = @NewValue
WHERE ...
-- now you could use @@OLD_ROWCOUNT