Biblioteca MSDN

EVENTDATA (Transact-SQL)

 

**ESTE TÓPICO APLICA\-SE A:** ![](../Image/Applies%20to/yes.png)SQL Server \(começando com o 2008\) ![](../Image/Applies%20to/yes.png)Banco de Dados SQL do Azure ![](../Image/Applies%20to/no.png)Azure SQL Data Warehouse ![](../Image/Applies%20to/no.png)Parallel Data Warehouse

Retorna informações sobre eventos do servidor ou do banco de dados. EVENTDATA é chamado quando uma notificação de eventos é acionada, e os resultados são retornados ao agente de serviço especificado. EVENTDATA também pode ser usado no corpo de um gatilho DDL ou de logon.

Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Azure.

Topic link icon Convenções da sintaxe Transact-SQL

  
EVENTDATA( )  

EVENTDATA só retorna dados quando referido diretamente dentro de um gatilho DDL ou de logon. EVENTDATA retorna nulo se for chamado por outras rotinas, mesmo se essas rotinas forem chamadas por um gatilho DDL ou de logon.

Os dados retornados por EVENTDATA não serão válidos depois que uma transação que chamou EVENTDATA, implícita ou explicitamente, for confirmada ou revertida.

System_CAPS_ICON_caution.jpg Cuidado


EVENTDATA retorna dados XML. Esses dados são enviados ao cliente como Unicode, que usa 2 bytes para cada caractere. Os pontos de código Unicode a seguir podem ser representados no XML que é retornado por EVENTDATA:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

Alguns caracteres que podem se aparecer em identificadores Transact-SQL e dados não são exprimíveis ou permissíveis em XML. 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 (?).

Para proteger a segurança de logons, quando instruções CREATE LOGIN ou ALTER LOGIN são executadas, as senhas não são exibidas.

EVENTDATA retorna um valor do tipo xml. Por padrão, a definição de esquema de todos os eventos é instalada no seguinte diretório: C:\Arquivos de Programas\Microsoft SQL Server\130\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

Como alternativa, o esquema do evento é publicado na página da Web Esquemas XML do Microsoft SQL Server.

Para extrair o esquema de qualquer evento específico, pesquise o esquema pelo Tipo Complexo EVENT_INSTANCE_<event_type>. Por exemplo, para extrair o esquema do evento DROP_TABLE, pesquise o esquema por EVENT_INSTANCE_DROP_TABLE.

A.Consultando dados de evento em um gatilho DDL

O exemplo a seguir cria um gatilho DDL para impedir que novas tabelas sejam criadas no banco de dados. A instrução Transact-SQL que aciona o gatilho é capturada usando XQuery em relação aos dados XML gerados por EVENTDATA. Para obter mais informações, consulte Referência de linguagem Xquery (SQL Server).

System_CAPS_ICON_note.jpg Observação


Ao consultar o elemento <TSQLCommand> usando Resultados em Grade no SQL Server Management Studio, as quebras de linha no texto do comando não aparecerão. Em vez disso, use Resultados em Texto.

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  

System_CAPS_ICON_note.jpg Observação


Para retornar dados de evento, recomenda-se usar o método value() de XQuery em vez do método query(). 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.

B.Criando uma tabela de log com dados de evento em um gatilho DDL

O exemplo a seguir cria uma tabela para armazenar informações sobre todos os eventos no nível do banco de dados e popula a tabela com um gatilho DDL. O tipo do evento e a instrução Transact-SQL são capturados usando XQuery em relação aos dados XML gerados por EVENTDATA.

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  

Usar a função EVENTDATA
Gatilhos DDL
Notificações de eventos
Gatilhos de logon

Contribuições da comunidade

Mostrar:
© 2016 Microsoft