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



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



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

645   6  

6 ответов:

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

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

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

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

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

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

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

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

Я просто установил его:SET NOCOUNT OFF не нужно использовать @@ROWCOUNT.

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

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

предупреждение: @@ROWCOUNT может возвратить Богус данные, если изменяемая таблица имеет триггеры привязываться к нему!

The @@ROWCOUNT возвращает количество записей, затронутых триггером, а не фактический оператор!

Comments

    Ничего не найдено.