sp_trace_generateevent (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure 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 Sie nach Abschluss der gespeicherten Prozedur abrufen 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_generateevent
werden. 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"}]