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