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

SE APLICA A: síSQL Server síAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Esta función devuelve información acerca de los eventos de base de datos o servidor.This function returns information about server or database events. EVENTDATA se llama cuando se activa una notificación de eventos y el resultado se devuelve al Service Broker especificado.When an event notification fires, and the specified service broker receives the results, EVENTDATA is called. Un desencadenador DDL o LOGON también admite el uso interno de EVENTDATA.A DDL or logon trigger also support internal use of EVENTDATA.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

  
EVENTDATA( )  

NotasRemarks

EVENTDATA devuelve datos solo cuando se hace referencia al mismo directamente dentro de un desencadenador DDL o LOGON.EVENTDATA returns data only when referenced directly inside of a DDL or logon trigger. EVENTDATA devuelve NULL si otras rutinas lo llaman, incluso si un desencadenador DDL o LOGON llama a esas rutinas.EVENTDATA returns null if other routines call it, even if a DDL or logon trigger calls those routines.

Los datos que EVENTDATA devuelve no son válidos después de una transacción queData returned by EVENTDATA is invalid after a transaction that

  • llamó a EVENTDATA de manera explícitacalled EVENTDATA explicitly
  • llamó a EVENTDATA de manera implícitacalled EVENTDATA implicitly
  • se confirmacommits
  • se revierteis rolled back

Precaución

EVENTDATA devuelve datos de XML, enviados al cliente como Unicode que usa 2 bytes para cada carácter.EVENTDATA returns XML data, sent to the client as Unicode that uses 2 bytes for each character. EVENTDATA devuelve XML que puede representar estos puntos de código de Unicode:EVENTDATA returns XML that can represent these Unicode code points:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

XML no puede expresar, ni permitirá, algunos caracteres que pueden aparecer en los datos e identificadores de Transact-SQLTransact-SQL.XML cannot express, and will not permit, some characters that can appear in Transact-SQLTransact-SQL identifiers and data. Los caracteres o datos que tienen puntos de código que no se muestran en la lista anterior se asignan a un signo de interrogación (?).Characters or data that have code points not shown in the previous list are mapped to a question mark (?).

Las contraseñas no se muestran cuando se ejecutan las instrucciones CREATE LOGIN o ALTER LOGIN.Passwords do not display when CREATE LOGIN or ALTER LOGIN statements execute. Esto protege la seguridad del inicio de sesión.This protects login security.

Esquemas devueltosSchemas Returned

EVENTDATA devuelve un valor de tipo de datos xml.EVENTDATA returns a value of data type xml. De forma predeterminada, la definición del esquema para todos los eventos se instala en este directorio: C:\Program Files\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:\Program Files\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

La página web Esquemas XML de Microsoft SQL Server también tiene el esquema de eventos.The Microsoft SQL Server XML Schemas web page also has the event schema.

Para extraer el esquema de un evento concreto, busque el esquema del tipo complejo EVENT_INSTANCE_<event_type>.To extract the schema for any particular event, search the schema for the Complex Type EVENT_INSTANCE_<event_type>. Por ejemplo, para extraer el esquema del evento DROP_TABLE, busque el esquema de EVENT_INSTANCE_DROP_TABLE.For example, to extract the schema for the DROP_TABLE event, search the schema for EVENT_INSTANCE_DROP_TABLE.

EjemplosExamples

A.A. Consultar datos de evento en un desencadenador DDLQuerying event data in a DDL trigger

En este ejemplo se crea un desencadenador DDL que impide la creación de nuevas tablas de bases de datos.This example creates a DDL trigger that prevents creation of new database tables. El uso de XQuery con los datos XML generados por EVENTDATA captura la instrucción Transact-SQLTransact-SQL que activa el desencadenador.Use of XQuery against the XML data generated by EVENTDATA captures the Transact-SQLTransact-SQL statement that fires the trigger. Consulte Referencia del lenguaje XQuery (SQL Server) para más información.See XQuery Language Reference (SQL Server) for more information.

Nota

Cuando se usa Resultados a cuadrícula en SQL Server Management StudioSQL Server Management Studio para consultar el elemento <TSQLCommand>, no se muestran los saltos de línea en el texto del comando.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. Es preferible usar Resultados a texto.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

Para devolver datos de evento, use el método XQuery value() en lugar del método query() .To return event data, use the XQuery value() method instead of the query() method. El método query() devuelve XML e instancias de retorno de carro y avance de línea (CR/LF) con el carácter de escape “y” comercial en el resultado, mientras que el método value() representa instancias de CR/LF invisibles en el resultado.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. Crear una tabla de registro con datos de evento en un desencadenador DDLCreating a log table with event data in a DDL trigger

En este ejemplo se crea una tabla para almacenar información sobre todos los eventos de nivel de base de datos y rellena esa tabla con un desencadenador DDL.This example creates a table for information storage about all database level events, and populates that table with a DDL trigger. El uso de XQuery con los datos XML generados por EVENTDATA captura el tipo de evento y la instrucción 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  

Consulte tambiénSee Also

Usar la función EVENTDATA Use the EVENTDATA Function
Desencadenadores DDL DDL Triggers
Notificaciones de eventos Event Notifications
Desencadenadores logonLogon Triggers