Получение выходных сообщений из пакетной команды SQL (SQL Server)

Я выполняю несколько дискретных запросов к 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)

person mikeymo    schedule 18.11.2008    source источник


Ответы (3)


изучите события SQL Connection. Я думаю, это то, что вам нужно: http://msdn.microsoft.com/en-us/library/a0hee08w.aspx

person Mladen Prajdic    schedule 19.11.2008

Я предлагаю использовать для этого переменную @@ rowcount. Обычно, когда я выполняю такие команды, если я хочу уловить как потенциальную ошибку, так и затронутые строки, я делаю

declare @rowsAffected int, @error int

select * from sometable
     select @rowsAffected = @@rowcount, @error = @@error

if @@error <> 0 goto errorCleanup
person Nick DeVore    schedule 18.11.2008

Ник прав, когда предлагает @@ROWCOUNT - на самом деле, как правило, я всегда использую SET NOCOUNT ON, который имеет (небольшое) преимущество в производительности, но, что более важно, эта деталь является деталью реализации - так что код не должен заботиться ...

Если вы хотите вернуть значение (например, количество обновленных строк), используйте любое из:

  • возвращаемое значение
  • выходной параметр
  • Оператор SELECT

У последнего больше всего накладных расходов

person Marc Gravell    schedule 19.11.2008