sp_trace_generateevent (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Crea un evento definido por el usuario. El evento se puede recopilar mediante seguimiento de SQL o eventos extendidos.

Nota:

Este procedimiento almacenado no está en desuso. Todos los demás procedimientos almacenados relacionados con el seguimiento de SQL están en desuso.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_trace_generateevent
    [ @eventid = ] eventid
    [ , [ @userinfo = ] N'userinfo' ]
    [ , [ @userdata = ] userdata ]
[ ; ]

Argumentos

[ @eventid = ] eventid

Identificador del evento que se va a activar. @eventid es int, sin ningún valor predeterminado. El identificador debe estar en el intervalo desde 82 hasta 91 el inclusivo. Este intervalo representa eventos definidos por el usuario. En seguimiento de SQL, use sp_trace_setevent para agregar un evento con este identificador a un seguimiento para capturar eventos con el mismo identificador desencadenado desde este procedimiento almacenado.

[ @userinfo = ] 'userinfo'

Cadena opcional definida por el usuario. @userinfo es nvarchar(128), con un valor predeterminado de NULL.

[ @userdata = ] userdata

Los datos opcionales definidos por el usuario para el evento. @userdata es varbinary(8000) con un valor predeterminado de 0x.

Valores de código de retorno

En la tabla siguiente se describen los valores de código devueltos que los usuarios pueden obtener siguiendo la finalización del procedimiento almacenado.

Código devuelto Descripción
0 Ningún error.
1 Error desconocido.
3 El evento especificado no es válido. Es posible que el evento no exista o no sea adecuado para el procedimiento almacenado.
13 Memoria insuficiente Se devuelve cuando no hay suficiente memoria para realizar la acción especificada.

Comentarios

Para capturar los eventos desencadenados por este procedimiento almacenado mediante Eventos extendidos, agregue el user_info evento a una sesión de eventos. Para obtener más información, vea CREATE EVENT SESSION. El user_info evento se desencadena para cualquier valor de identificador de evento definido por el usuario que se pase al @eventid parámetro .

Solo se pueden usar números de identificador de eventos definidos por el usuario con sp_trace_generateevent. Se produce un error si se usa cualquier otro número de identificador de evento.

Los parámetros de este procedimiento almacenado se escriben estrictamente. Si el tipo de datos del valor pasado a un parámetro no coincide con el tipo de datos de parámetro especificado en su descripción, el procedimiento almacenado devuelve un error.

sp_trace_generateevent realiza muchas de las acciones ejecutadas anteriormente por los xp_trace_* procedimientos almacenados extendidos. Use sp_trace_generateevent en lugar de xp_trace_generate_event.

Permisos

En SQL Server y en Azure SQL Instancia administrada, requiere el ALTER TRACE permiso . En Azure SQL Database, requiere la pertenencia al public rol de base de datos.

Ejemplos

En el ejemplo siguiente se desencadena un evento definido por el usuario cuando se inserta una fila en una tabla. El evento contiene los datos insertados en la tabla.

Para recopilar el evento desencadenado por este ejemplo, cree una sesión de eventos extendidos e incluya el user_info evento, o cree un seguimiento de SQL e incluya el 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"}]