Устаревшее приложение выполняет 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 или в этих других банках знаний.Это просто случай ТРИГГЕРЫ ЗЛО?
Могу ли я повлиять на @@ ROWCOUNT?