Partilhar via


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

@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_generateevento . 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"}]