Устаревшее приложение выполняет 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?