Выполнение 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 переменной, и моя логика основана на этой переменной