Delen via


sp_trace_generateevent (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Hiermee maakt u een door de gebruiker gedefinieerde gebeurtenis. De gebeurtenis kan worden verzameld met SQL Trace of uitgebreide gebeurtenissen.

Notitie

Deze opgeslagen procedure is niet afgeschaft. Alle andere opgeslagen SQL Trace-procedures worden afgeschaft.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

[ @eventid = ] eventid-

De id van de gebeurtenis die moet worden geactiveerd. @eventid is int, zonder standaardinstelling. De id moet binnen het bereik liggen van 82 tot 91 inclusief. Dit bereik vertegenwoordigt door de gebruiker gedefinieerde gebeurtenissen. Gebruik in SQL Trace sp_trace_setevent om een gebeurtenis met deze id toe te voegen aan een tracering om gebeurtenissen vast te leggen met dezelfde id die is geactiveerd vanuit deze opgeslagen procedure.

[ @userinfo = ] 'userinfo'

De optionele door de gebruiker gedefinieerde tekenreeks. @userinfo is nvarchar(128), met een standaardwaarde van NULL.

[ @userdata = ] userdata-

De optionele door de gebruiker gedefinieerde gegevens voor de gebeurtenis. @userdata is varbinary(8000), met een standaardwaarde van 0x.

Codewaarden retourneren

In de volgende tabel worden de retourcodewaarden beschreven die u kunt ophalen na de voltooiing van de opgeslagen procedure.

Retourcode Beschrijving
0 Geen fout.
1 Onbekende fout.
3 De opgegeven gebeurtenis is niet geldig. De gebeurtenis bestaat mogelijk niet of is niet geschikt voor de opgeslagen procedure.
13 Onvoldoende geheugen. Geretourneerd wanneer er onvoldoende geheugen is om de opgegeven actie uit te voeren.

Opmerkingen

Als u de gebeurtenissen wilt vastleggen die door deze opgeslagen procedure zijn geactiveerd met behulp van uitgebreide gebeurtenissen, voegt u de user_info gebeurtenis toe aan een gebeurtenissessie. Zie CREATE EVENT SESSIONvoor meer informatie. De user_info gebeurtenis wordt geactiveerd voor elke door de gebruiker gedefinieerde gebeurtenis-id die wordt doorgegeven aan de parameter @eventid.

Alleen id-nummers van door de gebruiker gedefinieerde gebeurtenissen kunnen worden gebruikt met sp_trace_generateevent. Er wordt een fout gegenereerd als er een ander gebeurtenis-id-nummer wordt gebruikt.

De parameters van deze opgeslagen procedure worden strikt getypt. Als het gegevenstype van de waarde die wordt doorgegeven aan een parameter niet overeenkomt met het parametergegevenstype dat is opgegeven in de beschrijving, retourneert de opgeslagen procedure een fout.

sp_trace_generateevent voert veel van de acties uit die eerder zijn uitgevoerd door de xp_trace_* uitgebreide opgeslagen procedures. Gebruik sp_trace_generateevent in plaats van xp_trace_generate_event.

Machtigingen

Voor SQL Server en in Azure SQL Managed Instance is de machtiging ALTER TRACE vereist. In Azure SQL Database moet u lid zijn van de public databaserol.

Voorbeelden

In het volgende voorbeeld wordt een door de gebruiker gedefinieerde gebeurtenis geactiveerd wanneer een rij in een tabel wordt ingevoegd. De gebeurtenis bevat de gegevens die in de tabel zijn ingevoegd.

Als u de gebeurtenis wilt verzamelen die door dit voorbeeld is geactiveerd, een uitgebreide gebeurtenissessie maken en de user_info gebeurtenis opnemen, of een SQL-tracering maken en de UserConfigurable:0 gebeurtenis opnemen.

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