Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Esta função retorna informações sobre eventos de servidor ou banco de dados. Quando uma notificação de evento é acionada e o agente de serviço especificado recebe os resultados, EVENTDATA é chamado. Um gatilho DDL ou de logon também oferece suporte ao uso interno do EVENTDATA.
Transact-SQL convenções de sintaxe
Sintaxe
EVENTDATA( )
Observações
EVENTDATA retorna dados somente quando referenciados diretamente dentro de um gatilho DDL ou logon.
EVENTDATA retorna null se outras rotinas o chamarem, mesmo que um gatilho DDL ou logon chame essas rotinas.
Os dados devolvidos por EVENTDATA são inválidos após uma transação que
- chamado
EVENTDATAexplicitamente - chamado
EVENTDATAimplicitamente - consolidações
- é revertida
Atenção
EVENTDATA retorna dados XML, enviados ao cliente como Unicode que usa 2 bytes para cada caractere.
EVENTDATA retorna XML que pode representar estes pontos de código Unicode:
0x0009
0x000A
0x000D
>= 0x0020 && <= 0xD7FF
>= 0xE000 && <= 0xFFFD
O XML não pode expressar, e não permitirá, alguns caracteres que podem aparecer em identificadores e dados Transact-SQL. Caracteres ou dados que têm pontos de código não mostrados na lista anterior são mapeados para um ponto de interrogação (?).
As senhas não são exibidas quando CREATE LOGIN as instruções são ALTER LOGIN executadas. Isso protege a segurança de login.
Esquemas retornados
EVENTDATA retorna um valor do tipo de dados xml. Por padrão, a definição de esquema para todos os eventos é instalada neste diretório: <drive>:\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.
Para extrair o esquema para qualquer evento específico, pesquise o esquema para o Tipo EVENT_INSTANCE_<event_type>complexo . Por exemplo, para extrair o esquema para o DROP_TABLE evento, pesquise o esquema para EVENT_INSTANCE_DROP_TABLE.
Exemplos
Um. Consultando dados de eventos em um gatilho DDL
Este exemplo cria um gatilho DDL que impede a criação de novas tabelas de banco de dados. O uso de XQuery contra os dados XML gerados por EVENTDATA captura a instrução Transact-SQL que dispara o gatilho. Consulte Referência de linguagem XQuery (SQL Server) para obter mais informações.
Observação
Ao usar Resultados para Grade no SQL Server Management Studio para consultar o <TSQLCommand> elemento, as quebras de linha no texto do comando não aparecem. Em vez disso, use Resultados para Texto .
USE AdventureWorks2022;
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() XQuery em vez do método query(). O método query() retorna instâncias XML e de retorno de carro e alimentação de linha (CR/LF) na saída, enquanto o método value() torna as instâncias CR/LF invisíveis na saída.
B. Criando uma tabela de log com dados de eventos em um gatilho DDL
Este exemplo cria uma tabela para armazenamento de informações sobre todos os eventos no nível do banco de dados e preenche essa tabela com um gatilho DDL. O uso de XQuery em relação aos dados XML gerados por EVENTDATA captura o tipo de evento e a instrução Transact-SQL.
USE AdventureWorks2022;
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
Ver também
Usar a função EVENTDATA
Gatilhos DDL
Notificações de eventos
Gatilhos de Início de Sessão