Udostępnij za pośrednictwem


sp_trace_generateevent (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Tworzy zdarzenie zdefiniowane przez użytkownika. Zdarzenie można zbierać przy użyciu śledzenia SQL lub zdarzeń rozszerzonych .

Nuta

Ta procedura składowana nie jest przestarzała. Wszystkie inne procedury składowane związane ze śledzeniem SQL są przestarzałe.

Transact-SQL konwencje składni

Składnia

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

Argumenty

Ważny

Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.

[ @eventid = ] eventid

Identyfikator zdarzenia do wyzwolenia. @eventid jest int bez wartości domyślnej. Identyfikator musi należeć do zakresu od 82 do 91 włącznie. Ten zakres reprezentuje zdarzenia zdefiniowane przez użytkownika. W usłudze SQL Trace użyj sp_trace_setevent, aby dodać zdarzenie z tym identyfikatorem do śledzenia w celu przechwycenia zdarzeń o tym samym identyfikatorze wyzwolonych z tej procedury składowanej.

[ @userinfo = ] 'userinfo'

Opcjonalny ciąg zdefiniowany przez użytkownika. @userinfo jest nvarchar(128), z wartością domyślną NULL.

[ @userdata = ] userdata

Opcjonalne dane zdefiniowane przez użytkownika dla zdarzenia. @userdata jest varbinary(8000) z wartością domyślną 0x.

Zwracanie wartości kodu

W poniższej tabeli opisano zwracane wartości kodu, które można uzyskać, po zakończeniu procedury składowanej.

Kod powrotny Opis
0 Brak błędu.
1 Nieznany błąd.
3 Określone zdarzenie jest nieprawidłowe. Zdarzenie może nie istnieć lub nie jest odpowiednie dla procedury składowanej.
13 Brak pamięci. Zwracany, gdy nie ma wystarczającej ilości pamięci, aby wykonać określoną akcję.

Uwagi

Aby przechwycić zdarzenia wyzwalane przez tę procedurę składowaną przy użyciu zdarzeń rozszerzonych, dodaj zdarzenie user_info do sesji zdarzeń. Aby uzyskać więcej informacji, zobacz CREATE EVENT SESSION. Zdarzenie user_info jest wyzwalane dla dowolnej wartości identyfikatora zdarzenia zdefiniowanego przez użytkownika przekazanej do parametru @eventid.

Z sp_trace_generateeventmożna używać tylko numerów identyfikatorów zdarzeń zdefiniowanych przez użytkownika. Jeśli jest używany inny numer identyfikatora zdarzenia, zostanie zgłoszony błąd.

Parametry tej procedury składowanej są ściśle typizowane. Jeśli typ danych wartości przekazanej do parametru nie jest zgodny z typem danych parametru określonym w jego opisie, procedura składowana zwraca błąd.

sp_trace_generateevent wykonuje wiele akcji wykonanych wcześniej przez xp_trace_* rozszerzonych procedur składowanych. Użyj sp_trace_generateevent zamiast xp_trace_generate_event.

Uprawnienia

W programie SQL Server i usłudze Azure SQL Managed Instance wymagane jest uprawnienie ALTER TRACE. W usłudze Azure SQL Database wymaga członkostwa w roli bazy danych public.

Przykłady

W poniższym przykładzie jest uruchamiane zdarzenie zdefiniowane przez użytkownika po wstawieniu wiersza do tabeli. Zdarzenie zawiera dane wstawione do tabeli.

Aby zebrać zdarzenie wyzwolone w tym przykładzie, utworzyć rozszerzoną sesję zdarzeń i dołączyć zdarzenie user_info lub utworzyć śledzenia SQL i dołączyć zdarzenie 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"}]