KM.*_*KM. 99
@@ ROWCOUNT将给出受上一个 SQL语句影响的行数,最好按照相关命令将其捕获到局部变量中,因为它的值将在您下次查看时更改:
DECLARE @Rows int
DECLARE @TestTable table (col1 int, col2 int)
INSERT INTO @TestTable (col1, col2) select 1,2 union select 3,4
SELECT @Rows=@@ROWCOUNT
SELECT @Rows AS Rows,@@ROWCOUNT AS [ROWCOUNT]
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
你得到的Rows
值是2,插入的行数,但是ROWCOUNT是1,因为SELECT @Rows=@@ROWCOUNT
命令影响了1行
如果您的交易中有多个INSERT或UPDATE等,您需要确定如何"计算"正在发生的事情.每张表可以有一个单独的总计,一个总的总价值,或者完全不同的东西.您需要为每个要跟踪的总数DECLARE变量,并在每个适用于它的操作后添加到该变量:
--note there is no error handling here, as this is a simple example
DECLARE @AppleTotal int
DECLARE @PeachTotal int
SELECT @AppleTotal=0,@PeachTotal=0
BEGIN TRANSACTION
INSERT INTO Apple (col1, col2) Select col1,col2 from xyz where ...
SET @AppleTotal=@AppleTotal+@@ROWCOUNT
INSERT INTO Apple (col1, col2) Select col1,col2 from abc where ...
SET @AppleTotal=@AppleTotal+@@ROWCOUNT
INSERT INTO Peach (col1, col2) Select col1,col2 from xyz where ...
SET @PeachTotal=@PeachTotal+@@ROWCOUNT
INSERT INTO Peach (col1, col2) Select col1,col2 from abc where ...
SET @PeachTotal=@PeachTotal+@@ROWCOUNT
COMMIT
SELECT @AppleTotal AS AppleTotal, @PeachTotal AS PeachTotal
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您需要有关日志/审计的更多信息,可以使用OUTPUT子句:这样,您不仅可以保持受影响的行数,还可以保留哪些记录.
作为插入期间输出子句的示例: 插入标识的SQL Server列表
DECLARE @InsertedIDs table(ID int);
INSERT INTO YourTable
OUTPUT INSERTED.ID
INTO @InsertedIDs
SELECT ...
Run Code Online (Sandbox Code Playgroud)
HTH
归档时间: |
|
查看次数: |
119310 次 |
最近记录: |