Partilhar via


sp_trace_generateevent (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Cria um evento definido pelo usuário. O evento pode ser coletado usando de Rastreamento SQL ou Extended Events.

Observação

Este procedimento armazenado não preterido. Todos os outros procedimentos armazenados relacionados ao Rastreamento SQL foram preteridos.

Transact-SQL convenções de sintaxe

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 de sintaxe. Se os parâmetros forem inseridos fora de ordem, ocorrerá uma mensagem de erro.

[ @eventid = ] eventid

A ID do evento a ser acionado. @eventid é int, sem padrão. O ID deve estar no intervalo de 82 a 91 inclusive. Esse intervalo representa eventos definidos pelo usuário. No Rastreamento SQL, use sp_trace_setevent para adicionar um evento com essa ID a um rastreamento para capturar eventos com a mesma ID disparada a partir deste procedimento armazenado.

[ @userinfo = ] 'informação do utilizador'

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 de 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 Sem 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 este procedimento armazenado usando Extended Events, adicione o evento user_info a uma sessão de evento. Para obter mais informações, consulte CREATE EVENT SESSION. O evento user_info é disparado para qualquer valor de ID de evento definido pelo usuário passado para o parâmetro @eventid.

Somente números de ID de eventos definidos pelo usuário podem ser usados com sp_trace_generateevent. Um erro é gerado se qualquer outro número de ID de evento for usado.

Os parâmetros deste procedimento armazenado são estritamente digitados. 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 pelo 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 do SQL do Azure, requer a permissão ALTER TRACE. No Banco de Dados SQL do Azure, requer associação à função de banco de dados public.

Exemplos

O exemplo a seguir dispara 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, criar uma sessão de evento estendida e incluir o evento user_info ou criar uma de rastreamento SQL e incluir o evento UserConfigurable:0.

-- 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 AS 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
              EXECUTE 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"}]