EVENTDATA (Transact-SQL)

Mis à jour : 12 décembre 2006

Retourne des informations sur les événements de serveur et de base de données. EVENTDATA est appelé lorsqu'une notification d'événement est déclenchée, et les résultats sont retournés au service broker spécifié. EVENTDATA peut également être utilisé dans le corps d'un déclencheur DDL ou de connexion.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

EVENTDATA( )

Notes

La fonction EVENTDATA renvoie des données uniquement si elle est référencée directement au sein d'un déclencheur DDL ou de connexion. Cette fonction retourne la valeur NULL si elle est appelée par d'autres routines, même si ces routines sont appelées par un déclencheur.

Les données retournées par EVENTDATA ne sont pas valides après qu'une transaction qui a appelé EVENTDATA, implicitement ou explicitement, est validée ou restaurée.

ms173781.Caution(fr-fr,SQL.90).gifAttention :
EVENTDATA retourne des données XML. Ces données sont envoyées au client sous la forme d'Unicode qui utilise 2 octets pour chaque caractère. Les points de code Unicode suivants peuvent être représentés dans le XML qui est retourné par EVENTDATA : 0x0009 0x000A 0x000D >= 0x0020 && <= 0xD7FF >= 0xE000 && <= 0xFFFD Certains caractères susceptibles d'apparaître dans des identificateurs et des données Transact-SQL ne peuvent pas être exprimés ou autorisés en XML. Les caractères ou données ayant des points de code non représentés dans la liste précédente sont mappés sur un point d'interrogation (?).

Schémas retournés

EVENTDATA retourne une valeur de type xml. Le schéma retourné pour chaque événement est constitué d'éléments imbriqués dans un élément <EVENT_INSTANCE>. Pour obtenir le schéma retourné pour un événement, utilisez Index ou Rechercher pour trouver la rubrique relative à l'événement dans la documentation en ligne de SQL Server. Les noms de propriété répertoriés pour l'événement correspondent à des éléments retournés dans le schéma, avec les exceptions suivantes :

  • EVENTDATA retourne un élément <ServerName>, au lieu de <SQLInstance> et <ComputerName>.
  • EVENTDATA retourne un élément <EventType> supplémentaire.

Par exemple, l'événement ALTER_TABLE renvoie le schéma suivant :

<EVENT_INSTANCE>
    <EventType>type</EventType>
    <PostTime>date-time</PostTime>
    <SPID>spid</SPID>
    <ServerName>name</ServerName>
    <LoginName>name</LoginName>
    <UserName>name</UserName>
    <DatabaseName>name</DatabaseName>
    <SchemaName>name</SchemaName>
    <ObjectName>name</ObjectName>
    <ObjectType>type</ObjectType>
    <TSQLCommand>command</TSQLCommand>
</EVENT_INSTANCE>

Exemples

A. Interrogation des données d'événement dans un déclencheur DDL

Cet exemple crée un déclencheur DDL pour empêcher la création de nouvelles tables dans la base de données. L'instruction Transact-SQL qui active le déclencheur est capturée à utilisant XQuery sur les données XML qui sont générées par EVENTDATA. Pour plus d'informations, consultez Requêtes XQuery impliquant le type de données xml.

ms173781.note(fr-fr,SQL.90).gifRemarque :
Lorsque vous interrogez l'élément <TSQLCommand> à l'aide de Résultats dans des grilles dans SQL Server Management Studio, les sauts de ligne n'apparaissent pas dans le texte de commande. Utilisez plutôt l'option Résultats dans du texte.
USE AdventureWorks;
GO
CREATE TRIGGER safety 
ON DATABASE 
FOR CREATE_TABLE 
AS 
    PRINT 'CREATE TABLE Issued.'
    SELECT EVENTDATA().value
        ('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
   RAISERROR ('New tables cannot be created in this database.', 16, 1) 
   ROLLBACK
;
GO
--Test the trigger.
CREATE TABLE NewTable (Column1 int);
GO
--Drop the trigger.
DROP TRIGGER safety
ON DATABASE
GO
ms173781.note(fr-fr,SQL.90).gifRemarque :
Lorsque vous voulez retourner des données d'événement, nous vous recommandons d'utiliser la méthode XQuery value() plutôt que la méthode query(). La méthode query() retourne des instances XML et CR/LF (retour chariot/saut de ligne) à séquence d'échappement perluète dans la sortie, tandis que la méthode value() retourne des instances CR/LF invisibles à la sortie.

B. Création d'une table de journal avec données d'événements dans un déclencheur DDL

Cet exemple crée une table pour stocker des informations sur tous les événements de niveau base de données, et remplit la table avec un déclencheur DDL. Le type d'événement et l'instruction Transact-SQL sont capturés en utilisant XQuery sur les données XML générées par EVENTDATA.

USE AdventureWorks;
GO
CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));
GO
CREATE TRIGGER log 
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS
DECLARE @data XML
SET @data = EVENTDATA()
INSERT ddl_log 
   (PostTime, DB_User, Event, TSQL) 
   VALUES 
   (GETDATE(), 
   CONVERT(nvarchar(100), CURRENT_USER), 
   @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'), 
   @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
GO
--Test the trigger.
CREATE TABLE TestTable (a int)
DROP TABLE TestTable ;
GO
SELECT * FROM ddl_log ;
GO
--Drop the trigger.
DROP TRIGGER log
ON DATABASE
GO
--Drop table ddl_log.
DROP TABLE ddl_log
GO

Voir aussi

Autres ressources

Utilisation de la fonction EVENTDATA
Conception des déclencheurs DDL
Conception de notifications d'événements

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Nouveau contenu :
  • Des informations ont été ajoutées sur l'utilisation de la fonction EVENTDATA dans le corps d'un déclencheur de connexion. Les déclencheurs de connexion sont introduits dans SQL Server Service Pack 2.