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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Essa função retorna informações sobre eventos do servidor ou do banco de dados.This function returns information about server or database events. Quando uma notificação de evento é acionada e o agente de serviços especificado recebe os resultados, EVENTDATA é chamado.When an event notification fires, and the specified service broker receives the results, EVENTDATA is called. Um gatilho de logon ou DDL também dá suporte ao uso interno de EVENTDATA.A DDL or logon trigger also support internal use of EVENTDATA.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

  
EVENTDATA( )  

RemarksRemarks

EVENTDATA só retorna dados quando referenciado diretamente dentro de um gatilho DDL ou de logon.EVENTDATA returns data only when referenced directly inside of a DDL or logon trigger. O EVENTDATA retorna null se outras rotinas o chamam, mesmo se um gatilho DDL ou logon chama essas rotinas.EVENTDATA returns null if other routines call it, even if a DDL or logon trigger calls those routines.

Is dados retornados pelo EVENTDATA são inválidos após uma transação queData returned by EVENTDATA is invalid after a transaction that

  • chamou EVENTDATA explicitamentecalled EVENTDATA explicitly
  • chamou EVENTDATA implicitamentecalled EVENTDATA implicitly
  • confirmaçõescommits
  • é revertidois rolled back

Cuidado

EVENTDATA retorna dados XML, enviados ao cliente como Unicode, que usam dois bytes para cada caractere.EVENTDATA returns XML data, sent to the client as Unicode that uses 2 bytes for each character. O EVENTDATA retorna o XML que pode representar esses pontos de código Unicode:EVENTDATA returns XML that can represent these Unicode code points:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

O XML não pode expressar e não permitirá alguns caracteres que podem aparecer em identificadores Transact-SQLTransact-SQL e dados.XML cannot express, and will not permit, some characters that can appear in Transact-SQLTransact-SQL identifiers and data. Os caracteres ou os dados que tenham pontos de código não mostrados na lista anterior serão mapeados para um ponto de interrogação (?).Characters or data that have code points not shown in the previous list are mapped to a question mark (?).

As senhas não são exibidos quando as instruções CREATE LOGIN ou ALTER LOGIN são executadas.Passwords do not display when CREATE LOGIN or ALTER LOGIN statements execute. Isso protege a segurança de logon.This protects login security.

Esquemas retornadosSchemas Returned

EVENTDATA retorna um valor do tipo de dados xml.EVENTDATA returns a value of data type xml. Por padrão, a definição de esquema para todos os eventos é instalada neste diretório: C:\Arquivos de Programas\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:\Arquivos de Programas\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

A página da Web Esquemas XML do Microsoft SQL Server também tem o esquema de eventos.The Microsoft SQL Server XML Schemas web page also has the event schema.

Para extrair o esquema de qualquer evento específico, pesquise o esquema pelo Tipo Complexo EVENT_INSTANCE_<event_type>.To extract the schema for any particular event, search the schema for the Complex Type EVENT_INSTANCE_<event_type>. Por exemplo, para extrair o esquema do evento DROP_TABLE, pesquise o esquema por EVENT_INSTANCE_DROP_TABLE.For example, to extract the schema for the DROP_TABLE event, search the schema for EVENT_INSTANCE_DROP_TABLE.

ExemplosExamples

A.A. Consultando dados de evento em um gatilho DDLQuerying event data in a DDL trigger

Este exemplo cria um gatilho DDL que impede a criação de novas tabelas de banco de dados.This example creates a DDL trigger that prevents creation of new database tables. O uso de XQuery em relação aos dados XML gerados por EVENTDATA captura a instrução Transact-SQLTransact-SQL que aciona o gatilho.Use of XQuery against the XML data generated by EVENTDATA captures the Transact-SQLTransact-SQL statement that fires the trigger. Confira Referência da linguagem XQuery (SQL Server) para obter mais informações.See XQuery Language Reference (SQL Server) for more information.

Observação

Ao usar Resultados em Grade em SQL Server Management StudioSQL Server Management Studio para consultar o elemento <TSQLCommand>, quebras de linha no texto do comando não aparecem.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. Em vez disso, use Results to 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  

Observação

Para retornar dados de evento, use o método value() do XQuery em vez do método query() .To return event data, use the XQuery value() method instead of the query() method. O método query() retorna instâncias XML e CR/LF (Retorno de Carro e Alimentação de Linha) com escape com E comercial na saída, enquanto o método value() renderiza instâncias CR/LF invisíveis na saída.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. Criando uma tabela de log com dados de evento em um gatilho DDLCreating a log table with event data in a DDL trigger

Este exemplo cria uma tabela para o armazenamento de informações sobre todos os eventos de nível de banco de dados e preenche a tabela com um gatilho DDL.This example creates a table for information storage about all database level events, and populates that table with a DDL trigger. O uso de XQuery em relação aos dados XML gerados por EVENTDATA captura o tipo de evento e a instrução 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 TambémSee Also

Usar a função EVENTDATA Use the EVENTDATA Function
Gatilhos DDL DDL Triggers
Notificações de eventos Event Notifications
Gatilhos de logonLogon Triggers