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
Deze functie retourneert informatie over server- of database-gebeurtenissen. Wanneer een gebeurtenismelding wordt geactiveerd en de opgegeven servicebroker de resultaten ontvangt, EVENTDATA
wordt aangeroepen. Een DDL- of aanmeldingstrigger ondersteunt ook intern gebruik van EVENTDATA
.
Transact-SQL syntaxis-conventies
Syntaxis
EVENTDATA( )
Opmerkingen
EVENTDATA
retourneert alleen gegevens wanneer er rechtstreeks naar een DDL- of aanmeldingstrigger wordt verwezen.
EVENTDATA
retourneert null als andere routines deze aanroepen, zelfs als een DDL- of aanmeldingstrigger deze routines aanroept.
Gegevens die worden geretourneerd door EVENTDATA
, zijn ongeldig na een transactie die
- expliciet aangeroepen
EVENTDATA
- impliciet aangeroepen
EVENTDATA
- doorvoeringen
- wordt teruggedraaid
Waarschuwing
EVENTDATA
retourneert XML-gegevens, verzonden naar de client als Unicode die voor elk teken 2 bytes gebruikt.
EVENTDATA
retourneert XML die deze Unicode-codepunten kan vertegenwoordigen:
0x0009
0x000A
0x000D
>= 0x0020 && <= 0xD7FF
>= 0xE000 && <= 0xFFFD
XML kan niet worden weergegeven en staat bepaalde tekens niet toe die kunnen worden weergegeven in Transact-SQL id's en gegevens. Tekens of gegevens met codepunten die niet in de vorige lijst worden weergegeven, worden toegewezen aan een vraagteken (?).
Wachtwoorden worden niet weergegeven wanneer CREATE LOGIN
of ALTER LOGIN
instructies worden uitgevoerd. Dit beschermt de aanmeldingsbeveiliging.
Geretourneerde schema's
EVENTDATA retourneert een waarde van het gegevenstype XML. Standaard wordt de schemadefinitie voor alle gebeurtenissen geïnstalleerd in deze map: <station>:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.
De webpagina XML-schema's van Microsoft SQL Server bevat ook het gebeurtenisschema.
Als u het schema voor een bepaalde gebeurtenis wilt extraheren, zoekt u in het schema naar het complexe type EVENT_INSTANCE_<event_type>
. Als u bijvoorbeeld het schema voor de DROP_TABLE
gebeurtenis wilt extraheren, zoekt u in het schema naar EVENT_INSTANCE_DROP_TABLE
.
Voorbeelden
Eén. Query's uitvoeren op gebeurtenisgegevens in een DDL-trigger
In dit voorbeeld wordt een DDL-trigger gemaakt die het maken van nieuwe databasetabellen voorkomt. Gebruik van XQuery op basis van de XML-gegevens die worden gegenereerd door EVENTDATA
het vastleggen van de Transact-SQL instructie waarmee de trigger wordt geactiveerd. Zie XQuery Language Reference (SQL Server) voor meer informatie.
Opmerking
Wanneer u resultaten gebruikt in Grid in SQL Server Management Studio om een query uit te voeren op het <TSQLCommand>
element, worden regeleinden in de opdrachttekst niet weergegeven. Gebruik in plaats daarvan resultaten voor tekst .
USE AdventureWorks2022;
GO
CREATE TRIGGER safety
ON DATABASE
FOR CREATE_TABLE
AS
PRINT 'CREATE TABLE Issued.'
SELECT EVENTDATA().value
('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
RAISERROR ('New tables cannot be created in this database.', 16, 1)
ROLLBACK
;
GO
--Test the trigger.
CREATE TABLE NewTable (Column1 INT);
GO
--Drop the trigger.
DROP TRIGGER safety
ON DATABASE;
GO
Opmerking
Als u gebeurtenisgegevens wilt retourneren, gebruikt u de methode XQuery value() in plaats van de query() -methode. De methode query() retourneert XML- en ampersand-escaped regelterugloop- en regelinvoerexemplaren (CR/LF) in de uitvoer, terwijl de methode value() CR/LF-exemplaren onzichtbaar maakt in de uitvoer.
B. Een logboektabel maken met gebeurtenisgegevens in een DDL-trigger
In dit voorbeeld wordt een tabel gemaakt voor informatieopslag over alle gebeurtenissen op databaseniveau en wordt die tabel gevuld met een DDL-trigger. Het gebruik van XQuery op basis van de XML-gegevens die worden gegenereerd door EVENTDATA
het gebeurtenistype en de Transact-SQL-instructie vast te leggen.
USE AdventureWorks2022;
GO
CREATE TABLE ddl_log (PostTime DATETIME, DB_User NVARCHAR(100), Event NVARCHAR(100), TSQL NVARCHAR(2000));
GO
CREATE TRIGGER log
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @data XML
SET @data = EVENTDATA()
INSERT ddl_log
(PostTime, DB_User, Event, TSQL)
VALUES
(GETDATE(),
CONVERT(NVARCHAR(100), CURRENT_USER),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(2000)') ) ;
GO
--Test the trigger.
CREATE TABLE TestTable (a INT);
DROP TABLE TestTable ;
GO
SELECT * FROM ddl_log ;
GO
--Drop the trigger.
DROP TRIGGER log
ON DATABASE;
GO
--Drop table ddl_log.
DROP TABLE ddl_log;
GO
Zie ook
De functie EVENTDATA gebruiken
DDL-triggers
Gebeurtenismeldingen
Aanmeldingstriggers