Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure 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 EVENTDATA
is 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 LOGIN
ALTER 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