Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure 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"}]
Verwante inhoud
- CREATE EVENT SESSION (Transact-SQL)
- Overzicht van uitgebreide gebeurtenissen
- sys.fn_trace_geteventinfo (Transact-SQL)
- sp_trace_setevent (Transact-SQL)
- SQL-tracering