Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Den här funktionen returnerar information om server- eller databashändelser. När ett händelsemeddelande utlöses och den angivna tjänstkoordinatorn tar emot resultatet EVENTDATA
anropas. En DDL- eller inloggningsutlösare stöder också intern användning av EVENTDATA
.
Transact-SQL syntaxkonventioner
Syntax
EVENTDATA( )
Anmärkningar
EVENTDATA
returnerar endast data när de refereras direkt i en DDL- eller inloggningsutlösare.
EVENTDATA
returnerar null om andra rutiner anropar det, även om en DDL- eller inloggningsutlösare anropar dessa rutiner.
Data som returneras av EVENTDATA
är ogiltiga efter en transaktion som
- anropas
EVENTDATA
explicit - kallas
EVENTDATA
implicit - genomföranden
- återställs
Försiktighet
EVENTDATA
returnerar XML-data som skickas till klienten som Unicode som använder 2 byte för varje tecken.
EVENTDATA
returnerar XML som kan representera dessa Unicode-kodpunkter:
0x0009
0x000A
0x000D
>= 0x0020 && <= 0xD7FF
>= 0xE000 && <= 0xFFFD
XML kan inte uttrycka och tillåter inte vissa tecken som kan visas i Transact-SQL identifierare och data. Tecken eller data som har kodpunkter som inte visas i föregående lista mappas till ett frågetecken (?).
Lösenord visas inte när CREATE LOGIN
eller ALTER LOGIN
instruktioner körs. Detta skyddar inloggningssäkerheten.
Returnerade scheman
EVENTDATA returnerar ett värde av datatypen xml. Som standard installeras schemadefinitionen för alla händelser i den här katalogen: <enhet>:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.
Sidan Xml-scheman för Microsoft SQL Server har också händelseschemat.
Om du vill extrahera schemat för en viss händelse söker du i schemat efter Komplex typ EVENT_INSTANCE_<event_type>
. Om du till exempel vill extrahera schemat för DROP_TABLE
händelsen söker du i schemat efter EVENT_INSTANCE_DROP_TABLE
.
Exempel
A. Köra frågor mot händelsedata i en DDL-utlösare
I det här exemplet skapas en DDL-utlösare som förhindrar att nya databastabeller skapas. Användning av XQuery mot XML-data som genereras av EVENTDATA
samlar in den Transact-SQL-instruktion som utlöser utlösaren. Mer information finns i XQuery Language Reference (SQL Server).
Anmärkning
När du använder Results to Grid i SQL Server Management Studio för att fråga elementet <TSQLCommand>
visas inte radbrytningar i kommandotexten. Använd Resultat till Text i stället.
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
Anmärkning
Om du vill returnera händelsedata använder du metoden XQuery value() i stället för metoden query(). Metoden query() returnerar XML- och et-escape-instanser för vagnretur och radmatning (CR/LF) i utdata, medan metoden value() återger CR/LF-instanser osynliga i utdata.
B. Skapa en loggtabell med händelsedata i en DDL-utlösare
Det här exemplet skapar en tabell för informationslagring om alla händelser på databasnivå och fyller tabellen med en DDL-utlösare. Användning av XQuery mot XML-data som genereras av EVENTDATA
samlar in händelsetypen och Transact-SQL-instruktionen.
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
Se även
Använda funktionen EVENTDATA
DDL-utlösare
Händelsemeddelanden
inloggningsutlösare