Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Cette fonction retourne des informations sur les événements de serveur et de base de données. Lorsqu’une notification d’événement est déclenchée et que le Service Broker spécifié reçoit les résultats, EVENTDATA est appelé. Un déclencheur DDL ou d’ouverture de session prend également en charge l’utilisation interne de EVENTDATA.
Conventions de la syntaxe Transact-SQL
Syntaxe
EVENTDATA( )
Notes
EVENTDATA ne retourne des données que si elles sont référencées directement au sein d’un déclencheur DDL ou d’ouverture de session.
EVENTDATA retourne la valeur Null si d’autres routines l’appellent, même si un déclencheur DDL ou d’ouverture de session appelle ces routines.
Les données retournées par EVENTDATA ne sont pas valides après une transaction qui :
- a appelé
EVENTDATAexplicitement ; - a appelé
EVENTDATAimplicitement ; - est en validation ;
- est restaurée.
Attention
EVENTDATA retourne des données XML qui sont envoyées au client au format Unicode, qui utilise 2 octets pour chaque caractère. Le code XML retourné par EVENTDATA peut représenter ces points de code Unicode :
0x0009
0x000A
0x000D
>= 0x0020 && <= 0xD7FF
>= 0xE000 && <= 0xFFFD
XML ne peut ni exprimer ni autoriser certains caractères susceptibles d’apparaître dans les identificateurs et les données Transact-SQL. 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 (?).
Les mots de passe ne s’affichent pas pendant l’exécution d’instructions CREATE LOGIN ou ALTER LOGIN de façon à préserver la sécurité de connexion.
Schémas retournés
EVENTDATA renvoie une valeur dont le type de données est xml. Par défaut, la définition de schéma pour tous les événements s’installe dans ce répertoire : <drive> :\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.
La page web Schémas XML Microsoft SQL Server comporte également le schéma d’événement.
Pour extraire le schéma pour un événement particulier, recherchez dans le schéma le type complexe EVENT_INSTANCE_<event_type>. Par exemple, pour extraire le schéma de l’événement DROP_TABLE, recherchez EVENT_INSTANCE_DROP_TABLE dans le schéma.
Exemples
R. Interrogation des données d'événement dans un déclencheur DDL
Cet exemple crée un déclencheur DDL qui empêche la création de nouvelles tables de base de données. La requête XQuery effectuée sur les données XML générées par EVENTDATA capture l’instruction Transact-SQL qui active le déclencheur. Voir Informations de référence sur le langage XQuery (SQL Server) pour plus d’informations.
Notes
Lorsque vous utilisez Résultats dans des grilles dans SQL Server Management Studio pour interroger l’élément <TSQLCommand>, les sauts de ligne n’apparaissent pas dans le texte de la commande. Utilisez plutôt l’option Résultats dans du texte.
USE AdventureWorks2022;
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
Notes
Pour retourner des données d’événement, utilisez la méthode XQuery value() plutôt que la méthode query(). La méthode query() renvoie 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 dans 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 la remplit avec un déclencheur DDL. La requête XQuery effectuée sur les données XML générées par EVENTDATA capture le type d’événement et l’instruction Transact-SQL.
USE AdventureWorks2022;
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
Utiliser la fonction EVENTDATA
Déclencheurs DDL
Notifications d'événements
Déclencheurs de connexion