Можно ли полностью захватить параметризованные запросы с помощью DBCC INPUTBUFFER? - PullRequest
1 голос
/ 13 января 2010

В SQL Server 2008 я использую триггеры для записи всех изменений, внесенных в конкретную таблицу в моей базе данных. Моя цель - запечатлеть все изменения. То есть для захвата того, какие данные вставляются, а не только эти данные вставляются. В триггере я использую столбец EventInfo набора результатов, возвращенного DBCC INPUTBUFFER, чтобы получить выполняемый в данный момент оператор SQL, а также столбец Parameters, чтобы получить счетчик используемых параметров. В большинстве случаев это работает, но когда внешнее приложение выполняет запрос, используя ADO.NET, или строки вставляются / удаляются, используя Edit Top 200 Rows в SSMS, EventInfo не имеет значений параметров.

Например, если строковый запрос выполняется в окне запроса или как непараметризованный строковый запрос в ADO.NET, EventInfo показывает:

  INSERT INTO DTS_TABLE ([ID] ,[DTS_ID] ,[DTS] ,[TICS])  VALUES (10, 9, GETDATE(), 91234)  

При вставке тех же данных с использованием Edit Top 200 Rows или параметризованного запроса в ADO.NET, EventInfo показывает (новые строки добавлены для удобства чтения):

(@id int,@dtsid int,@dts datetime,@tics int)
INSERT INTO DTS_TABLE ([ID] ,[DTS_ID] ,[DTS] ,[TICS])  
VALUES (@id, @dtsid, @dts, @tics)

Есть ли способ доступа к значениям параметров в контексте моего триггера?

1 Ответ

0 голосов
/ 13 января 2010

Почему вы заботитесь о значениях параметров? Все, что вам нужно, это старые и новые значения в таблице (старые и новые в случае обновления - для вставки, только новые значения).

Поскольку вы используете SQL Server 2008, вам стоит взглянуть на новую функцию аудита . Доступно намного больше деталей, а производительность значительно улучшена по сравнению с использованием триггеров.

Вот страница , которая описывает информацию, доступную с помощью новой функции.

Ниже приведена информация о новой функции .

...