Compartilhar via


sp_trace_generateevent (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstâ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_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"}]