Я выполняю несколько дискретных запросов к SQL Server в одном пакете. Например:
update tableX set colA = 'freedom';
select lastName from customers;
insert into tableY (a,b,c) values (x,y,z);
Теперь я хочу зафиксировать результат в DataSet (из оператора select), что достаточно просто сделать ... но как мне также захватить "мета" ответ от этой команды, аналогично тому, как это делает Query Analyzer / SQL Mgt Studio когда он отображает вкладку "Сообщения" и отображает что-то похожее на:
(1 Row affected)
(2 Rows Updated)
Ответ 2 · рейтинг 3 · Nick DeVore
Я предлагаю использовать для этого переменную @@ rowcount. Обычно, когда я выполняю такие команды, если я хочу уловить как потенциальную ошибку, так и затронутые строки, я делаю
declare @rowsAffected int, @error int
select * from sometable
select @rowsAffected = @@rowcount, @error = @@error
if @@error <> 0 goto errorCleanup
Ответ 3 · рейтинг 1 · Marc Gravell
Ник прав, когда предлагает @@ROWCOUNT - на самом деле, как правило, я всегда использую SET NOCOUNT ON, который имеет (небольшое) преимущество в производительности, но, что более важно, эта деталь является деталью реализации - так что код не должен заботиться ...
Если вы хотите вернуть значение (например, количество обновленных строк), используйте любое из:
- возвращаемое значение
- выходной параметр
- Оператор SELECT
У последнего больше всего накладных расходов