sp_trace_generateevent (Transact-SQL)
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Skapar en användardefinierad händelse. Händelsen kan samlas in med hjälp av SQL Trace eller Extended Events.
Not
Den här lagrade proceduren är inte inaktuell. Alla andra SQL Trace-relaterade lagrade procedurer är inaktuella.
Transact-SQL syntaxkonventioner
Syntax
sp_trace_generateevent
[ @eventid = ] eventid
[ , [ @userinfo = ] N'userinfo' ]
[ , [ @userdata = ] userdata ]
[ ; ]
Argument
Viktig
Argument för utökade lagrade procedurer måste anges i den specifika ordning som beskrivs i avsnittet Syntax. Om parametrarna anges i fel ordning visas ett felmeddelande.
[ @eventid = ] eventid
ID:t för händelsen som ska utlösas.
@eventid är int, utan standard. ID:t måste finnas i intervallet från 82
till 91
inklusive. Det här intervallet representerar användardefinierade händelser. I SQL Trace använder du sp_trace_setevent för att lägga till en händelse med det här ID:t till en spårning för att samla in händelser med samma ID som utlöstes från den här lagrade proceduren.
[ @userinfo = ] "userinfo"
Den valfria användardefinierade strängen.
@userinfo är nvarchar(128), med standardvärdet NULL
.
[ @userdata = ] userdata
Valfria användardefinierade data för händelsen.
@userdata är varbinary(8000), med standardvärdet 0x
.
Returnera kodvärden
I följande tabell beskrivs de returkodsvärden som du kan få efter att den lagrade proceduren har slutförts.
Returnera kod | Beskrivning |
---|---|
0 |
Inget fel. |
1 |
Okänt fel. |
3 |
Den angivna händelsen är inte giltig. Händelsen kanske inte finns eller så är den inte lämplig för den lagrade proceduren. |
13 |
Slut på minne. Returneras när det inte finns tillräckligt med minne för att utföra den angivna åtgärden. |
Anmärkningar
Om du vill samla in de händelser som utlöstes av den här lagrade proceduren med hjälp av Extended Eventslägger du till händelsen user_info
i en händelsesession. Mer information finns i CREATE EVENT SESSION. Händelsen user_info
utlöses för alla användardefinierade händelse-ID-värden som skickas till parametern @eventid
.
Endast ID-nummer för användardefinierade händelser kan användas med sp_trace_generateevent
. Ett fel uppstår om något annat händelse-ID-nummer används.
Parametrarna för den här lagrade proceduren är strikt skrivna. Om datatypen för värdet som skickas till en parameter inte matchar den parameterdatatyp som anges i beskrivningen returnerar den lagrade proceduren ett fel.
sp_trace_generateevent
utför många av de åtgärder som tidigare utfördes av xp_trace_*
utökade lagrade procedurer. Använd sp_trace_generateevent
i stället för xp_trace_generate_event
.
Behörigheter
I SQL Server och i Azure SQL Managed Instance kräver ALTER TRACE
behörighet. I Azure SQL Database kräver medlemskap i public
databasrollen.
Exempel
I följande exempel utlöses en användardefinierad händelse när en rad infogas i en tabell. Händelsen innehåller data som infogats i tabellen.
Om du vill samla in händelsen som utlöstes av det här exemplet skapa en utökad händelsesession och inkludera händelsen user_info
, eller skapa en SQL-spårning och inkludera händelsen 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"}]