Другими словами, если у меня есть триггер, который вызывает процедуру; я должен быть в состоянии проверить @@rowcount
в первой строке процесса? И должно ли @@rowcount
иметь значение на основе последнего SQL-выражения, выполненного в триггере?
Я отлаживаю процесс, который я не написал. Первая строка процедуры -
if @@rowcount=0
RETURN
Процесс вызывается триггером. Последнее, что триггер делает перед вызовом процедуры, это:
INSERT INTO #temp_table (some fields...)
SELECT some fields.. FROM inserted
EXEC SOMEPROC
Происходит следующее: @@rowcount
в процедуре всегда равен 0, и процедура заканчивается до того, как он что-либо делает. Исправить это довольно легко, потому что я просто переместил проверку @@rowcount
в триггер и вынул ее из процедуры.
Но мне любопытно, почему это было написано именно так. Почти как раньше работало, а теперь нет? Я просто хотел проверить и посмотреть, возможно ли было какое-то изменение в поведении между SQL2005 и SQL2008 или какие-то системные настройки, которые были перевернуты. Или один из моих предшественников просто написал плохой код, который никогда не работал?