2010-01-12 3 views
1

Dans SQL Server 2008, j'utilise des déclencheurs pour capturer toutes les modifications apportées à une table spécifique dans ma base de données. Mon but est de capturer le changement entier. C'est-à-dire, pour capturer quelles données sont insérées, pas simplement que les données sont insérées. Dans le déclencheur, j'utilise la colonne EventInfo du jeu de résultats renvoyé par DBCC INPUTBUFFER pour obtenir l'instruction SQL en cours d'exécution ainsi que la colonne Parameters pour obtenir le nombre de paramètres utilisés. Cela fonctionne dans la plupart des cas, mais lorsqu'une application externe exécute une requête à l'aide d'ADO.NET ou que des lignes sont insérées/supprimées à l'aide de l'option Modifier les 200 lignes supérieures dans SSMS, EventInfo n'a pas de valeur de paramètre.Les requêtes paramétrables peuvent-elles être entièrement capturées à l'aide de DBCC INPUTBUFFER?

Par exemple, si une chaîne de requête est exécutée dans une fenêtre de requête ou une requête de chaîne non paramétrée dans ADO.NET, EventInfo montre:

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

Lors de l'insertion des mêmes données en utilisant Modifier les 200 lignes ou une requête dans ADO.NET paramétrisé, montre EventInfo (de nouvelles lignes ajouté pour une meilleure lisibilité):

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

y at-il de toute façon d'accéder aux valeurs des paramètres dans le contexte de mon déclencheur?

+0

J'ai le même problème et voici ma raison de chercher une réponse: Je dois tuer une opération 'insertion' qui bloque près de 250 sélections. Avant de le tuer, je veux savoir quelles données seront perdues. – KSK

+0

Serait bon d'obtenir les paremètres si quelqu'un sait comment – davey

Répondre

0

Pourquoi vous soucier des valeurs de paramètres? Tout ce dont vous devez vous soucier est l'ancienne et la nouvelle valeur dans la table (ancienne et nouvelle dans le cas d'une mise à jour - pour une insertion, seulement de nouvelles valeurs).

Étant donné que vous utilisez SQL Server 2008, vous devez consulter le nouveau Auditing feature. Il y a beaucoup plus de détails disponibles, et les performances sont nettement améliorées par rapport aux déclencheurs.

Here is a page qui décrit les informations disponibles à l'aide de la nouvelle fonctionnalité.

Here is a how to page sur la nouvelle fonctionnalité.