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


86

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

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


1
Установить No Count тоже было моей проблемой. Чтобы проверить, выполните свою хранимую процедуру в студии управления и посмотрите, получаете ли вы счетчики, если да, то убедитесь, что у вас есть выходная переменная.
user2624356

Ответы:


80

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

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


46

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

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

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

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

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

33

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

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

Более подробная информация находится здесь: SqlCommand.ExecuteNonQuery () возвращает -1 при выполнении Insert / Update / Delete


У меня это работает. Моя сохраненная процедура - это просто операторы вставки, и, похоже, она работает. Благодарность!
Harvey Darvey

Благодарность! Хорошая работа по ссылке.
Лео Гурдиан,

8

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



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.