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

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Diese Funktion gibt Informationen zu Server- oder Datenbankereignissen zurück.This function returns information about server or database events. Beim Auslösen einer Ereignisbenachrichtigung und, wenn der angegebene Service Broker die Ergebnisse empfängt, wird EVENTDATA aufgerufen.When an event notification fires, and the specified service broker receives the results, EVENTDATA is called. Ein DDL- oder LOGON-Trigger unterstützt auch die interne Verwendung von EVENTDATA.A DDL or logon trigger also support internal use of EVENTDATA.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

  
EVENTDATA( )  

RemarksRemarks

EVENTDATA gibt nur Daten zurück, wenn ein direkter Verweis innerhalb eines DDL- oder LOGON-Triggers vorliegt.EVENTDATA returns data only when referenced directly inside of a DDL or logon trigger. EVENTDATA gibt beim Aufruf durch andere Routinen NULL zurück, selbst wenn diese Routinen durch einen DDL- oder LOGON-Trigger aufgerufen werden.EVENTDATA returns null if other routines call it, even if a DDL or logon trigger calls those routines.

Von EVENTDATA zurückgegebene Daten sind ungültig, nachdem eine TransaktionData returned by EVENTDATA is invalid after a transaction that

  • EVENTDATA explizit aufruftcalled EVENTDATA explicitly
  • EVENTDATA implizit aufruftcalled EVENTDATA implicitly
  • einen Commit ausführtcommits
  • durch ein Rollback rückgängig gemacht wurdeis rolled back

Achtung

EVENTDATA gibt XML-Daten zurück, die als Unicode an den Client gesendet werden; dabei werden 2 Bytes für jedes Zeichen verwendet.EVENTDATA returns XML data, sent to the client as Unicode that uses 2 bytes for each character. EVENTDATA gibt XML-Daten zurück, die diese Unicode-Codeendpunkte darstellen können:EVENTDATA returns XML that can represent these Unicode code points:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

In XML können und werden einige Zeichen, die in Transact-SQLTransact-SQL-Bezeichnern und -Daten vorkommen können, nicht ausgedrückt bzw. zugelassen.XML cannot express, and will not permit, some characters that can appear in Transact-SQLTransact-SQL identifiers and data. Zeichen oder Daten mit Codeelementen, die in der vorhergehenden Liste nicht enthalten sind, weisen ein Fragezeichen auf (?).Characters or data that have code points not shown in the previous list are mapped to a question mark (?).

Kennwörter werden nicht angezeigt, wenn CREATE LOGIN- oder ALTER LOGIN-Anweisungen ausgeführt werden.Passwords do not display when CREATE LOGIN or ALTER LOGIN statements execute. Dies dient dem Schutz der Anmeldeinformationen.This protects login security.

Zurückgegebene SchemasSchemas Returned

EVENTDATA gibt einen Wert vom Datentyp xml zurück.EVENTDATA returns a value of data type xml. Standardmäßig wird die Schemadefinition für alle Ereignisse im folgenden Verzeichnis installiert: C:\Programme\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:\Programme\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

Auf der Webseite Microsoft SQL Server: XML-Schemas ist ebenfalls das Ereignisschema veröffentlicht.The Microsoft SQL Server XML Schemas web page also has the event schema.

Um das Schema für ein besonderes Ereignis zu extrahieren, durchsuchen Sie das Schema nach dem komplexen Typ EVENT_INSTANCE_<event_type>.To extract the schema for any particular event, search the schema for the Complex Type EVENT_INSTANCE_<event_type>. Zum Beispiel können Sie das Schema für das DROP_TABLE-Ereignis extrahieren, indem Sie das Schema nach EVENT_INSTANCE_DROP_TABLE durchsuchen.For example, to extract the schema for the DROP_TABLE event, search the schema for EVENT_INSTANCE_DROP_TABLE.

BeispieleExamples

A.A. Abfragen von Ereignisdaten in einem DDL-TriggerQuerying event data in a DDL trigger

In diesem Beispiel wird ein DDL-Trigger erstellt, der die Erstellung neuer Datenbanktabellen verhindert.This example creates a DDL trigger that prevents creation of new database tables. Durch die Verwendung von XQuery für die von EVENTDATA generierten XML-Daten wird die Transact-SQLTransact-SQL-Anweisung erfasst, die den Trigger auslöst.Use of XQuery against the XML data generated by EVENTDATA captures the Transact-SQLTransact-SQL statement that fires the trigger. Weitere Informationen finden Sie unter XQuery-Sprachreferenz (SQL Server).See XQuery Language Reference (SQL Server) for more information.

Hinweis

Wenn Sie mithilfe von Ergebnisse in Raster in SQL Server Management StudioSQL Server Management Studio das <TSQLCommand>-Element abfragen, werden keine Zeilenumbrüche im Befehlstext angezeigt.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. Verwenden Sie stattdessen Ergebnisse in Text.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  

Hinweis

Zum Zurückgeben von Ereignisdaten verwenden Sie die XQuery-Methode value() anstelle der Methode query().To return event data, use the XQuery value() method instead of the query() method. Bei der query()-Methode werden XML-Daten und durch das kaufmännische Und-Zeichen geschützte CR/LF-Instanzen in der Ausgabe zurückgegeben, während bei der value()-Methode CR/LF-Instanzen zurückgegeben werden, die in der Ausgabe nicht sichtbar sind.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. Erstellen einer Protokolltabelle mit Ereignisdaten in einem DDL-TriggerCreating a log table with event data in a DDL trigger

In diesem Beispiel wird eine Tabelle zum Speichern von Informationen zu Ereignissen auf allen Datenbankebenen erstellt und die Tabelle mit einem DDL-Trigger aufgefüllt.This example creates a table for information storage about all database level events, and populates that table with a DDL trigger. Durch die Verwendung von XQuery für die von EVENTDATA generierten XML-Daten wird der Ereignistyp und die Transact-SQLTransact-SQL-Anweisung erfasst.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  

Weitere InformationenSee Also

Verwenden der EVENTDATA-Funktion Use the EVENTDATA Function
DDL-Trigger DDL Triggers
Ereignisbenachrichtigungen Event Notifications
Logon-TriggerLogon Triggers