如何获取事务插入的行数

我必须pipe理一个日志,我必须看到事务插入的行数。 有没有办法dynamic地做到这一点?

@@ ROWCOUNT会给出最后一条 SQL语句所影响的行数,最好是将它捕获到一个局部variables中,按照相应的命令,因为它的值在下次查看时会改变:

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] 

OUTPUT:

 (2 row(s) affected) Rows ROWCOUNT ----------- ----------- 2 1 (1 row(s) affected) 

你得到的Rows值是2,插入的行数,但是ROWCOUNT是1,因为SELECT @Rows=@@ROWCOUNT命令影响了1行

如果在事务中有多个INSERT或UPDATE等,则需要确定如何“计数”发生了什么事情。 你可以为每个表单独计算一个总价值,或者完全不同的东西。 您需要为每个要跟踪的总数声明一个variables,并在每个适用于它的操作之后添加一个variables:

 --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 

如果您需要进一步的信息来进行日志/审计,您可以使用OUTPUT子句:这样,不仅可以保留受影响的行数,还可以logging哪些logging。

作为插入期间输出子句的示例: SQL Server插入标识列表

 DECLARE @InsertedIDs table(ID int); INSERT INTO YourTable OUTPUT INSERTED.ID INTO @InsertedIDs SELECT ... 

HTH

我find了可能以前的post的答案。 这里是。

 CREATE TABLE #TempTable (id int) INSERT INTO @TestTable (col1, col2) OUTPUT INSERTED.id INTO #TempTable select 1,2 INSERT INTO @TestTable (col1, col2) OUTPUT INSERTED.id INTO #TempTable select 3,4 SELECT * FROM #TempTable --this select will chage @@ROWCOUNT value