@@ ROWCOUNT даст число строк, затронутых оператором SQL last , лучше всего записать его в локальную переменную после рассматриваемой команды, поскольку ее значение изменится в следующий раз посмотрите на это:
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]
ВЫВОД:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
вы получаете Rows
значение 2, количество вставленных строк, но ROWCOUNT равно 1, потому что команда SELECT @Rows=@@ROWCOUNT
затронула 1 строку
если в вашей транзакции есть несколько INSERT или UPDATE и т. Д., Вам необходимо определить, как вы хотите «посчитать» происходящее. Вы можете иметь отдельную сумму для каждой таблицы, одну общую сумму или что-то совершенно другое. Вам нужно будет ОБЪЯВИТЬ переменную для каждой суммы, которую вы хотите отслеживать, и добавлять к ней после каждой операции, которая к ней относится:
--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