EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)

SI APPLICA A: sìSQL Server sìDatabase SQL di Azure noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Questa funzione restituisce informazioni sugli eventi del server o del database.This function returns information about server or database events. La funzione EVENTDATA viene chiamata quando viene generata una notifica degli eventi e il Service Broker specificato riceve i risultati.When an event notification fires, and the specified service broker receives the results, EVENTDATA is called. Anche un trigger DDL o LOGON supporta l'uso interno di EVENTDATA.A DDL or logon trigger also support internal use of EVENTDATA.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

  
EVENTDATA( )  

RemarksRemarks

EVENTDATA restituisce dati solo se usata direttamente in un trigger DDL o LOGON.EVENTDATA returns data only when referenced directly inside of a DDL or logon trigger. EVENTDATA restituisce Null se chiamata da altre routine, anche se queste routine sono chiamate da un trigger DDL o LOGON.EVENTDATA returns null if other routines call it, even if a DDL or logon trigger calls those routines.

I dati restituiti da EVENTDATA non sono validi dopo una transazioneData returned by EVENTDATA is invalid after a transaction that

  • che chiama EVENTDATA in modo esplicitocalled EVENTDATA explicitly
  • che chiama EVENTDATA in modo implicitocalled EVENTDATA implicitly
  • che esegue il commitcommits
  • di cui viene eseguito il rollbackis rolled back

Attenzione

EVENTDATA restituisce dati XML, inviati al client in formato Unicode che usa 2 byte per ogni carattere.EVENTDATA returns XML data, sent to the client as Unicode that uses 2 bytes for each character. EVENTDATA restituisce codice XML che può rappresentare questi punti di codice Unicode:EVENTDATA returns XML that can represent these Unicode code points:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

Alcuni caratteri che possono essere inclusi in identificatori e dati Transact-SQLTransact-SQL non sono rappresentabili o consentiti in XML.XML cannot express, and will not permit, some characters that can appear in Transact-SQLTransact-SQL identifiers and data. Sui caratteri o i dati con elementi di codice non indicati nell'elenco precedente viene eseguito il mapping a un punto interrogativo (?).Characters or data that have code points not shown in the previous list are mapped to a question mark (?).

Le password non vengono visualizzate quando si eseguono istruzioni CREATE LOGIN o ALTER LOGIN.Passwords do not display when CREATE LOGIN or ALTER LOGIN statements execute. Ciò consente di proteggere la sicurezza degli account di accesso.This protects login security.

Schemi restituitiSchemas Returned

EVENTDATA restituisce un valore con tipo di dati xml.EVENTDATA returns a value of data type xml. Per impostazione predefinita, la definizione dello schema per tutti gli eventi è installata in questa directory: C:\Programmi\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.By default, the schema definition for all events installs in this directory: C:\Programmi\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

Lo schema di eventi è disponibile anche nella pagina Web Microsoft SQL Server XML Schemas (Schemi XML di Microsoft SQL Server).The Microsoft SQL Server XML Schemas web page also has the event schema.

Per estrarre lo schema di un evento specifico, cercare nello schema il tipo complesso EVENT_INSTANCE_<event_type>.To extract the schema for any particular event, search the schema for the Complex Type EVENT_INSTANCE_<event_type>. Ad esempio, per estrarre lo schema per l'evento DROP_TABLE, cercare nello schema EVENT_INSTANCE_DROP_TABLE.For example, to extract the schema for the DROP_TABLE event, search the schema for EVENT_INSTANCE_DROP_TABLE.

EsempiExamples

A.A. Recupero tramite query dei dati di eventi in un trigger DDLQuerying event data in a DDL trigger

Questo esempio crea un trigger DDL che impedisce la creazione di nuove tabelle di database.This example creates a DDL trigger that prevents creation of new database tables. L'uso di XQuery sui dati XML generati da EVENTDATA consente di acquisire l'istruzione Transact-SQLTransact-SQL che attiva il trigger.Use of XQuery against the XML data generated by EVENTDATA captures the Transact-SQLTransact-SQL statement that fires the trigger. Per altre informazioni, vedere Riferimento al linguaggio XQuery (SQL Server).See XQuery Language Reference (SQL Server) for more information.

Nota

Quando si usa Risultati in formato griglia in SQL Server Management StudioSQL Server Management Studio per recuperare l'elemento <TSQLCommand>, le interruzioni di riga nel testo del comando non vengono visualizzate.When using Results to Grid in SQL Server Management StudioSQL Server Management Studio to query the <TSQLCommand> element, line breaks in the command text do not appear. Usare invece Risultati in formato testo.Use Results to Text instead.

USE AdventureWorks2012;  
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  

Nota

Per la restituzione dei dati evento, usare il metodo XQuery value() invece del metodo query() .To return event data, use the XQuery value() method instead of the query() method. Il metodo query() restituisce istanze XML e CR/LF (ritorno a capo/avanzamento riga) trasformate con il carattere di escape e commerciale (&) nell'output, mentre il metodo value() rende le istanze CR/LF invisibili nell'output.The query() method returns XML and ampersand-escaped carriage return and line feed (CR/LF) instances in the output, while the value() method renders CR/LF instances invisible in the output.

B.B. Creazione di una tabella di log con dati di eventi in un trigger DDLCreating a log table with event data in a DDL trigger

Questo esempio crea una tabella per l'archiviazione di informazioni su tutti gli eventi a livello di database e tale tabella viene popolata con un trigger DDL.This example creates a table for information storage about all database level events, and populates that table with a DDL trigger. L'uso di XQuery sui dati XML generai da EVENTDATA consente di acquisire il tipo di evento e l'istruzione Transact-SQLTransact-SQL.Use of XQuery against the XML data generated by EVENTDATA captures the event type and the Transact-SQLTransact-SQL statement.

USE AdventureWorks2012;  
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  

Vedere ancheSee Also

Usare la funzione EVENTDATA Use the EVENTDATA Function
Trigger DDL DDL Triggers
Notifiche degli eventi Event Notifications
Trigger LOGONLogon Triggers