sp_trace_generateevent (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Erstellt ein benutzerdefiniertes Ereignis. Das Ereignis kann mithilfe von SQL-Ablaufverfolgungs - oder erweiterten Ereignissen erfasst werden.

Hinweis

Diese gespeicherte Prozedur ist nicht veraltet. Alle anderen gespeicherten SQL-Ablaufverfolgungsprozeduren sind veraltet.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

[ @eventid = ] eventid

Die ID des zu auslösenden Ereignisses. @eventid ist int, ohne Standard. Die ID muss sich im Bereich von 82 einschließlich 91 befinden. Dieser Bereich stellt benutzerdefinierte Ereignisse dar. Verwenden Sie in SQL Trace sp_trace_setevent , um ein Ereignis mit dieser ID zu einer Ablaufverfolgung hinzuzufügen, um Ereignisse mit derselben ID zu erfassen, die von dieser gespeicherten Prozedur ausgelöst wurde.

[ @userinfo = ] 'userinfo'

Die optionale benutzerdefinierte Zeichenfolge. @userinfo ist nvarchar(128), wobei die Standardeinstellung istNULL.

[ @userdata = ] userdata

Die optionalen benutzerdefinierten Daten für das Ereignis. @userdata ist varbinary(8000), mit einem Standardwert von 0x.

Rückgabecodewerte

In der folgenden Tabelle werden die Rückgabecodewerte beschrieben, die Benutzer nach Abschluss der gespeicherten Prozedur erhalten können.

Rückgabecode Beschreibung
0 Kein Fehler.
1 Unbekannter Fehler.
3 Das angegebene Ereignis ist ungültig. Das Ereignis ist möglicherweise nicht vorhanden oder für die gespeicherte Prozedur nicht geeignet.
13 Nicht genügend Arbeitsspeicher. Wird zurückgegeben, wenn nicht genügend Arbeitsspeicher zum Ausführen der angegebenen Aktion vorhanden ist.

Hinweise

Um die von dieser gespeicherten Prozedur ausgelösten Ereignisse mithilfe von erweiterten Ereignissen zu erfassen, fügen Sie das user_info Ereignis zu einer Ereignissitzung hinzu. Weitere Informationen finden Sie unter CREATE EVENT SESSION. Das user_info Ereignis wird für jeden benutzerdefinierten Ereignis-ID-Wert ausgelöst, der an den @eventid Parameter übergeben wird.

Es können nur ID-Nummern von benutzerdefinierten Ereignissen verwendet sp_trace_generateeventwerden. Wenn eine andere Ereignis-ID-Nummer verwendet wird, wird ein Fehler ausgelöst.

Die Parameter dieser gespeicherten Prozedur sind streng typiert. Wenn der Datentyp des an einen Parameter übergebenen Werts nicht mit dem in der Beschreibung angegebenen Parameterdatentyp übereinstimmt, gibt die gespeicherte Prozedur einen Fehler zurück.

sp_trace_generateevent führt viele der Aktionen aus, die zuvor von den xp_trace_* erweiterten gespeicherten Prozeduren ausgeführt wurden. Verwenden Sie sp_trace_generateevent anstelle von xp_trace_generate_event.

Berechtigungen

In SQL Server und in Azure SQL verwaltete Instanz ist die ALTER TRACE Berechtigung erforderlich. In Azure SQL-Datenbank ist eine Mitgliedschaft in der public Datenbankrolle erforderlich.

Beispiele

Im folgenden Beispiel wird ein benutzerdefiniertes Ereignis ausgelöst, wenn eine Zeile in eine Tabelle eingefügt wird. Das Ereignis enthält die in die Tabelle eingefügten Daten.

Um das von diesem Beispiel ausgelöste Ereignis zu erfassen, erstellen Sie eine erweiterte Ereignissitzung , fügen Sie das user_info Ereignis ein, oder erstellen Sie eine SQL-Ablaufverfolgung , und schließen Sie das UserConfigurable:0 Ereignis ein.

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