Выполнение, если @@ rowcount> 0 сбрасывает @@ rowcount в 0. Почему? - PullRequest
11 голосов
/ 09 октября 2011

Ссылка

@@ Rowcount используется для информирования о количестве строк, затронутых за последние выбрать, вставить, обновить или удалить операторы

declare @row int select 100 if @@rowcount>0  set @row=@@rowcount ...

Выше будет 0, потому что, как только if @@rowcount>0 выполняется он сбрасывается в 0, так как не возвращает никаких строк. Поэтому всегда присваивайте первая переменная

Почему оператор if @@rowcount>0 сбрасывает @@rowcount в 0? Не влияет ли значение @@rowcount только на операторы выбора, вставки, обновления и удаления?

спасибо

Ответы [ 2 ]

12 голосов
/ 09 октября 2011

На него влияет последнее утверждение. Как этот оператор 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>, CALLSURCURC, CLOSE CURSOR, BEGIN TRANSACTION или COMMIT TRANSACTION, сбрасывают значение ROWCOUNT на 0.

0 голосов
/ 23 февраля 2016

Ну, Я столкнулся с подобной проблемой при использовании sybase, которая указывает, что что-то может быть не так с «если».

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 не сбрасывается в ноль любым оператором, который не влияет на строки, , таким как оператор IF ." с другой стороны, существует большая путаница, как это действительно работает (на основе обсуждения в интернете)

В конце моего решения в первой строке я назначаю @@ rowcount переменной, и моя логика основана на этой переменной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...