Megosztás a következőn keresztül:


EVENTDATA (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Ez a függvény a kiszolgáló- vagy adatbáziseseményekről ad vissza információkat. Amikor egy eseményértesítés aktiválódik, és a megadott szolgáltatásközvetítő megkapja az eredményeket, EVENTDATA a rendszer meghívja. A DDL- vagy bejelentkezési eseményindítók a belső használatot EVENTDATAis támogatják.

Transact-SQL szintaxis konvenciók

Szemantika

EVENTDATA( )

Megjegyzések

EVENTDATA csak akkor ad vissza adatokat, ha a hivatkozás közvetlenül egy DDL- vagy bejelentkezési eseményindítón belül történik. EVENTDATA null értéket ad vissza, ha más rutinok meghívják, még akkor is, ha egy DDL- vagy bejelentkezési eseményindító meghívja ezeket a rutinokat.

A visszaadott EVENTDATA adatok érvénytelenek egy olyan tranzakció után, amely

  • explicit módon meghívva EVENTDATA
  • implicit módon meghívva EVENTDATA
  • véglegesítések
  • visszagördült

Figyelmeztetés

EVENTDATA XML-adatokat ad vissza, amelyeket unicode formátumban küld az ügyfélnek, amely minden karakterhez 2 bájtot használ. EVENTDATA Az alábbi Unicode-kódpontokat ábrázoló XML-t ad vissza:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

Az XML nem tudja kifejezni és nem engedélyezi az Transact-SQL azonosítókban és adatokban megjelenő karaktereket. Az előző listában nem szereplő kódpontokat tartalmazó karakterek vagy adatok kérdőjelre (?) vannak leképezve.

A jelszavak nem jelennek meg az utasítások végrehajtásakor CREATE LOGINALTER LOGIN . Ez védi a bejelentkezési biztonságot.

Visszaadott sémák

Az EVENTDATA xml típusú adatértéket ad vissza. Alapértelmezés szerint az összes esemény sémadefiníciója ebben a könyvtárban található: <meghajtó>:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

A Microsoft SQL Server XML-sémák weblapja is rendelkezik az eseménysémával.

Ha egy adott esemény sémáját szeretné kinyerni, keresse meg a sémát a Komplex típusban EVENT_INSTANCE_<event_type>. Ha például ki szeretné nyerni az esemény sémáját DROP_TABLE , keressen rá a sémára EVENT_INSTANCE_DROP_TABLE.

Példák

Egy. Eseményadatok lekérdezése DDL-eseményindítóban

Ez a példa létrehoz egy DDL-eseményindítót, amely megakadályozza az új adatbázistáblák létrehozását. Az XQuery használata az eseményindítót aktiváló Transact-SQL utasítás rögzítésével EVENTDATA létrehozott XML-adatokon. További információ: XQuery Language Reference (SQL Server).

Megjegyzés

Ha az SQL Server Management Studióban a Results to Grid használatával kérdezi le az <TSQLCommand> elemet, nem jelennek meg sortörések a parancsszövegben. Az Eredmények helyett a Szöveg elemet használja.

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  

Megjegyzés

Eseményadatok visszaadásához használja az XQuery value() metódust a lekérdezés() metódus helyett. A lekérdezési() metódus a kimenet xml- és amper- és kimenő kocsivissza- és sorbetöltési (CR/LF) példányait adja vissza, míg az érték() metódus láthatatlanná teszi a CR/LF-példányokat a kimenetben.

B. Naplótábla létrehozása eseményadatokkal egy DDL-eseményindítóban

Ez a példa létrehoz egy táblát az adatbázisszintű események információtárolásához, és feltölti a táblát egy DDL-eseményindítóval. Az XQuery használata az eseménytípus és a Transact-SQL utasítás által EVENTDATA létrehozott XML-adatokon.

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  

Lásd még:

Az EVENTDATA függvény használata
DDL-es eseményindítók
Eseményértesítések
Bejelentkezési eseményindítók