Поделиться через


sp_trace_generateevent (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Создает пользовательское событие. Событие можно собирать с помощью трассировки SQL или расширенных событий.

Примечание.

Эта хранимая процедура не рекомендуется. Все остальные хранимые процедуры трассировки SQL устарели.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

[ @eventid = ] eventid

Идентификатор события для запуска. @eventid не используется без значения по умолчанию. Идентификатор должен находиться в диапазоне от 82 91 инклюзивного. Этот диапазон представляет определяемые пользователем события. В трассировке SQL используйте sp_trace_setevent для добавления события с этим идентификатором в трассировку для записи событий с тем же идентификатором, который был запущен из этой хранимой процедуры.

[ @userinfo = ] 'userinfo'

Необязательная определяемая пользователем строка. @userinfo — nvarchar(128) с значением по умолчаниюNULL.

[ @userdata = ] userdata

Необязательные пользовательские данные для события. @userdata — varbinary(8000) с значением по умолчанию0x.

Значения кода возврата

В следующей таблице описаны значения возвращаемого кода, которые можно получить после завершения хранимой процедуры.

Код возврата Description
0 Нет ошибки.
1 Неизвестную погрешность.
3 Указанное событие недопустимо. Событие может не существовать или оно не подходит для хранимой процедуры.
13 Нехватка памяти. Возвращается, когда недостаточно памяти для выполнения указанного действия.

Замечания

Чтобы записать события, запущенные этой хранимой процедурой с помощью расширенных событий, добавьте user_info событие в сеанс событий. Дополнительные сведения см. в разделе CREATE EVENT SESSION. Событие user_info запускается для любого определяемого пользователем значения идентификатора события, переданного параметру @eventid .

Можно использовать sp_trace_generateeventтолько идентификаторы определяемых пользователем событий. Ошибка возникает, если используется любой другой номер идентификатора события.

Параметры этой хранимой процедуры строго типизированны. Если тип данных, переданный параметру, не соответствует типу данных параметра, указанному в его описании, хранимая процедура возвращает ошибку.

sp_trace_generateevent выполняет многие действия, ранее выполняемые расширенными хранимыми xp_trace_* процедурами. Используйте sp_trace_generateevent вместо xp_trace_generate_event.

Разрешения

В SQL Server и в Управляемый экземпляр SQL Azure требуется ALTER TRACE разрешение. В База данных SQL Azure требуется членство в public роли базы данных.

Примеры

В следующем примере возникает событие, определяемое пользователем, при вставке строки в таблицу. Событие содержит данные, вставляемые в таблицу.

Чтобы собрать событие, запущенное в этом примере, создайте расширенный сеанс событий и включите user_info событие или создайте трассировку SQL и включите 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 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"}]