sp_trace_generateevent (Transact-SQL)
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
Cria um evento definido pelo usuário. O evento pode ser coletado usando o Rastreamento SQL ou Eventos Estendidos.
Observação
Esse procedimento armazenado não foi preterido. Todos os outros procedimentos armazenados relacionados ao Rastreamento do SQL foram preteridos.
Convenções de sintaxe de Transact-SQL
Sintaxe
sp_trace_generateevent
[ @eventid = ] eventid
[ , [ @userinfo = ] N'userinfo' ]
[ , [ @userdata = ] userdata ]
[ ; ]
Argumentos
Importante
Os argumentos para procedimentos armazenados estendidos devem ser inseridos na ordem específica, conforme descrito na seção sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.
@eventid [ = ] eventid
A ID do evento a ser disparado.
@eventid é int, sem padrão. A ID deve estar no intervalo de 82
até 91
inclusivo. Esse intervalo representa eventos definidos pelo usuário. No Rastreamento do SQL, use sp_trace_setevent para adicionar um evento com essa ID a um rastreamento para capturar eventos com a mesma ID disparada desse procedimento armazenado.
@userinfo [ = ] 'userinfo'
A cadeia de caracteres opcional definida pelo usuário.
@userinfo é nvarchar(128), com um padrão de NULL
.
@userdata [ = ] dados do usuário
Os dados opcionais definidos pelo usuário para o evento.
@userdata é varbinary(8000), com um padrão de 0x
.
Valores do código de retorno
A tabela a seguir descreve os valores de código de retorno que você pode obter, após a conclusão do procedimento armazenado.
Código de retorno | Descrição |
---|---|
0 |
Nenhum erro. |
1 |
Erro desconhecido. |
3 |
O evento especificado não é válido. O evento pode não existir ou não é apropriado para o procedimento armazenado. |
13 |
Sem memória. Retornado quando não há memória suficiente para executar a ação especificada. |
Comentários
Para capturar os eventos disparados por esse procedimento armazenado usando Eventos Estendidos, adicione o user_info
evento a uma sessão de evento. Para obter mais informações, consulte CREATE EVENT SESSION. O user_info
evento é acionado para qualquer valor de ID de evento definido pelo usuário passado para o @eventid
parâmetro.
Somente números de ID de eventos definidos pelo usuário podem ser usados com sp_trace_generateevent
o . Um erro será gerado se qualquer outro número de ID de evento for usado.
Os parâmetros desse procedimento armazenado são estritamente tipados. Se o tipo de dados do valor passado para um parâmetro não corresponder ao tipo de dados de parâmetro especificado em sua descrição, o procedimento armazenado retornará um erro.
sp_trace_generateevent
Executa muitas das ações executadas anteriormente pelos xp_trace_*
procedimentos armazenados estendidos. Use sp_trace_generateevent
em vez de xp_trace_generate_event
.
Permissões
No SQL Server e na Instância Gerenciada de SQL do Azure, requer a ALTER TRACE
permissão. No Banco de Dados SQL do Azure, requer associação public
na função de banco de dados.
Exemplos
O exemplo a seguir aciona um evento definido pelo usuário quando uma linha é inserida em uma tabela. O evento contém os dados inseridos na tabela.
Para coletar o evento disparado por este exemplo, crie uma sessão de evento estendida e inclua o user_info
evento ou crie um rastreamento SQL e inclua o UserConfigurable:0
evento.
-- Create a table
DROP TABLE IF EXISTS dbo.user_defined_event_example;
CREATE TABLE dbo.user_defined_event_example
(
Id int IDENTITY(1,1) PRIMARY KEY,
Data nvarchar(60) NOT NULL
);
DROP TRIGGER IF EXISTS fire_user_defined_event;
GO
-- Create an insert trigger on the table
CREATE TRIGGER fire_user_defined_event ON dbo.user_defined_event_example
FOR INSERT
AS
DECLARE @EventData varbinary(8000);
-- Convert inserted rows to JSON and cast it as a binary value
SELECT @EventData = CAST((
SELECT Id, Data
FROM inserted
FOR JSON AUTO
) AS varbinary(8000));
-- Fire the event with the payload carrying inserted rows as JSON
EXEC dbo.sp_trace_generateevent
@eventid = 82,
@userinfo = N'Inserted rows into dbo.user_defined_event_example',
@userdata = @EventData;
GO
-- Insert a row into the table. The trigger fires the event.
INSERT INTO dbo.user_defined_event_example (Data)
VALUES (N'Example data');
-- Copy the binary payload from the event and cast it to a string with the JSON value
SELECT CAST(0x5B007B0022004900640022003A0031002C002200440061007400610022003A0022004500780061006D0070006C0065002000640061007400610022007D005D00 AS nvarchar(max));
-- This returns: [{"Id":1,"Data":"Example data"}]