Получить ROWCOUNT из INSTEAD OF TRIGGER

Устаревшее приложение выполняет INSERT в таблице с помощью вместо триггера и впоследствии использует количество строк для дальнейшей обработки.

Теперь нам нужно отказаться от некоторых INSERT с помощью INSTEAD OF INSERT триггер.

Проблема в том, что @@ ROWCOUNT по-прежнему возвращает количество попыток вставки.

Например, фиктивный триггер, который никогда не завершит вставку, может быть

ALTER TRIGGER [dbo].[trig_ACCOUNT_CREDITS_RunningTotalINSERT]
   ON  [dbo].[ACCOUNT_CREDITS] 
   INSTEAD OF INSERT
AS 
BEGIN
 --tried with NOCOUNT ON and OFF
 SET NOCOUNT OFF;

 --This is an example of the branching logic that might determine 
 --whether or not to do the INSERT
IF 1=2 --no insert will ever occur (example only)
BEGIN
    INSERT INTO dbo.ACCOUNT_CREDITS (COL1, COL2)
    SELECT COL1, COL2 from INSERTED
END
END

, а некоторые операторы INSERT могут быть

--No rows will be inserted because value of COL1 < 5
INSERT INTO dbo.ACCOUNT_CREDITS (COL1, COL2) VALUES ( 3, 3)

--We would assume row count to be 0, but returns 1
select @@ROWCOUNT

--No rows will be inserted because value of COL1 < 5       
INSERT INTO dbo.ACCOUNT_CREDITS (COL1, COL2) 
SELECT 1, 1
union all
SELECT 2, 2

--We would assume row count to be 0, but returns 2
select @@ROWCOUNT

Я могу обойти эту проблему, но меня беспокоит, что я не могу доверять @@ ROWCOUNT. Я не могу найти ссылки на эту проблему в SO или в тех других банках знаний. Это просто случай TRIGGERS ARE EVIL?

Могу ли я повлиять на @@ ROWCOUNT?

6
задан Laramie 27 November 2010 в 00:28
поделиться