Как я могу получить количество записей, на которые влияет хранимая процедура? - PullRequest
82 голосов
/ 29 июля 2009

Для операторов INSERT, UPDATE и DELETE, выполняемых непосредственно для базы данных, большинство поставщиков баз данных возвращают количество затронутых строк. Для хранимых процедур количество затронутых записей всегда равно -1.

Как мы можем получить количество записей, затронутых хранимой процедурой?

Ответы [ 6 ]

78 голосов
/ 29 июля 2009

Зарегистрируйте выходной параметр для хранимой процедуры и установите значение на основе @@ROWCOUNT при использовании SQL Server. Используйте SQL%ROWCOUNT, если вы используете Oracle.

Имейте в виду, что если у вас несколько INSERT/UPDATE/DELETE, вам понадобится переменная для хранения результата из @@ROWCOUNT для каждой операции.

44 голосов
/ 29 июля 2009

@@RowCount даст вам количество записей, затронутых оператором SQL.

@@RowCount работает только в том случае, если вы сразу после этого выполните команду. Поэтому, если вы отслеживаете ошибки, вы должны делать это в одной строке. Если вы разделите его, вы упустите тот, который вы поставите вторым.

SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR

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

SELECT @NumRowsChanged = @NumRowsChanged  + @@ROWCOUNT, @ErrorCode = @@ERROR
29 голосов
/ 21 марта 2013

Оказывается, для меня SET NOCOUNT ON было задано в скрипте хранимой процедуры (по умолчанию в SQL Server Management Studio) и SqlCommand.ExecuteNonQuery(); всегда возвращало -1.

Я просто отключил его: SET NOCOUNT OFF без необходимости использования @@ROWCOUNT.

Более подробную информацию можно найти здесь: SqlCommand.ExecuteNonQuery () возвращает -1 при выполнении операции вставки / обновления / удаления

8 голосов
/ 29 июля 2009

Для Microsoft SQL Server вы можете вернуть переменную @@ROWCOUNT, чтобы получить количество строк, затронутых последним оператором в хранимой процедуре.

4 голосов
/ 29 июля 2009
0 голосов
/ 09 сентября 2012

ПРЕДУПРЕЖДЕНИЕ: @@ROWCOUNT может вернуть поддельные данные, если к изменяемой таблице прикреплено триггеров !

@@ROWCOUNT вернет количество записей, на которые воздействует TRIGGER, а не фактическое утверждение!

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