Выполнение if @@rowcount> 0 сбрасывает @@rowcount в 0. Почему?
Ссылка
@@Rowcount используется для информирования о количестве строк, затронутых последним выбирать, вставлять, обновлять или удалять утверждения
declare @row int select 100 if @@rowcount>0 set @[email protected]@rowcount ...
Вышеуказанное возвратит 0, потому что как только выполняется if @@rowcount>0
он равен reset 0, так как он не возвращает никаких строк. Поэтому всегда назначайте сначала переменная
Почему оператор if @@rowcount>0
reset @@rowcount
равен 0? Не влияет ли значение @@rowcount
только на операции выбора, вставки, обновления и удаления?
Благодарю вас
Ответы
Ответ 1
На него влияет последний оператор. Как этот оператор SET
Declare @row int
select 100 union all select 200 union all select 300
set @row = @@rowcount;
SELECT @row, @@rowcount
Если вы читаете фактические документы Microsoft SQL Server в MSDN, в нем приводятся примеры того, какие утверждения влияют на @@ROWCOUNT
. Например, "например" означает, что другие операторы, такие как IF, также устанавливают его на нуль
Заявления, такие как USE, SET <option>,
DEALLOCATE CURSOR, CLOSE CURSOR, BEGIN TRANSACTION или COMMIT TRANSACTION reset значение ROWCOUNT равное 0.
Ответ 2
Ну,
Я столкнулся с подобной проблемой, используя sybase, что указывает на то, что что-то может быть неправильно с "if".
declare @counter1 int
declare @counter2 int
select @counter1 = @@rowcount
if @@rowcount = 0 return
select @counter2 = @@rowcount
вывод:
counter1 = 3
counter2 = 0
Я ожидал бы 3 (оригинал) или 1 (из-за выбора).
Это еще более странно из-за
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc38151.1540/doc/html/san1278452893271.html
"Значение @@rowcount не reset равно нулю с помощью любого оператора, который не влияет на строки, , например, инструкции IF."
с другой стороны, есть много путаницы, как это действительно работает (на основе обсуждения в Интернете)
В конце моего решения в первой строке я присваиваю переменной @@rowcount переменной, и моя логика основана на этой переменной