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