Sdílet prostřednictvím


sp_trace_generateevent (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Vytvoří uživatelem definovanou událost. Událost lze shromažďovat pomocí trasování SQL nebo rozšířených událostí.

Poznámka

Tato uložená procedura není zastaralá. Všechny ostatní uložené procedury související se službou SQL Trace jsou zastaralé.

Transact-SQL konvence syntaxe

Syntax

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

Argumenty

Důležitý

Argumenty rozšířených uložených procedur musí být zadány v určitém pořadí, jak je popsáno v části Syntaxe. Pokud jsou parametry zadány mimo pořadí, dojde k chybové zprávě.

[ @eventid = ] id události

ID události, která se má aktivovat. @eventid je , bez výchozího nastavení. ID musí být v rozsahu od 82 až po 91 včetně. Tento rozsah představuje uživatelem definované události. V nástroji SQL Trace použijte sp_trace_setevent k přidání události s tímto ID do trasování za účelem zachycení událostí se stejným ID aktivovaným z této uložené procedury.

[ @userinfo = ] 'userinfo'

Volitelný uživatelem definovaný řetězec. @userinfo je nvarchar(128), s výchozím NULL.

[ @userdata = ] userdata

Volitelná uživatelsky definovaná data události. @userdata je varbinary(8000), s výchozím 0x.

Návratové hodnoty kódu

Následující tabulka popisuje návratové hodnoty kódu, které můžete získat po dokončení uložené procedury.

Návratový kód Popis
0 Žádná chyba.
1 Neznámá chyba.
3 Zadaná událost není platná. Událost nemusí existovat nebo není vhodná pro uloženou proceduru.
13 Nedostatek paměti. Vráceno, pokud není dostatek paměti k provedení zadané akce.

Poznámky

Chcete-li zachytit události aktivované touto uloženou procedurou pomocí rozšířených událostí, přidejte událost user_info do relace události. Další informace naleznete v tématu CREATE EVENT SESSION. Událost user_info se aktivuje pro libovolnou hodnotu ID události definovanou uživatelem předanou parametru @eventid.

S sp_trace_generateeventlze použít pouze čísla ID událostí definovaných uživatelem. Pokud se použije nějaké jiné číslo ID události, vyvolá se chyba.

Parametry této uložené procedury jsou výhradně zadané. Pokud datový typ hodnoty předané parametru neodpovídá datovému typu parametru zadanému v popisu, vrátí uložená procedura chybu.

sp_trace_generateevent provádí mnoho akcí, které dříve provedl xp_trace_* rozšířených uložených procedur. Místo xp_trace_generate_eventpoužijte sp_trace_generateevent .

Dovolení

V SQL Serveru a ve službě Azure SQL Managed Instance vyžaduje ALTER TRACE oprávnění. Ve službě Azure SQL Database vyžaduje členství v roli databáze public.

Příklady

Následující příklad aktivuje událost definovanou uživatelem při vložení řádku do tabulky. Událost obsahuje data vložená do tabulky.

Pokud chcete shromáždit událost aktivovanou tímto příkladem, vytvořit rozšířenou relaci událostí a zahrnout událost user_info nebo vytvořit trasování SQL a zahrnout událost 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"}]