Для INSERT
, UPDATE
и DELETE
заявления SQL , выполненных непосредственно в базе данных, большинство поставщиков баз данных возвращает количество затронутых строк. Для хранимых процедур количество затронутых записей всегда -1
.
Как узнать количество записей, на которые влияет хранимая процедура?
Ответы:
Зарегистрируйте выходной параметр для хранимой процедуры и установите значение в зависимости от
@@ROWCOUNT
того, используется ли SQL Server. Используйте,SQL%ROWCOUNT
если вы используете Oracle.Имейте в виду, что если у вас их несколько
INSERT/UPDATE/DELETE
, вам понадобится переменная для сохранения результата@@ROWCOUNT
для каждой операции.источник
@@RowCount
даст вам количество записей, затронутых оператором SQL.@@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
источник
ВНИМАНИЕ:
@@ROWCOUNT
может возвращать поддельные данные, если к изменяемой таблице привязаны триггеры !@@ROWCOUNT
Возвращает количество записей , затронутых TRIGGER, а не фактическое заявление!источник