Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Tato funkce vrátí informace o serverových nebo databázových událostech. Když se aktivuje oznámení o události a zadaný zprostředkovatel služeb obdrží výsledky, EVENTDATA zavolá se. Aktivační událost DDL nebo přihlášení také podporuje interní použití EVENTDATA.
Syntaxe
EVENTDATA( )
Poznámky
EVENTDATA vrátí data pouze v případech, kdy se odkazuje přímo uvnitř DDL nebo triggeru přihlášení.
EVENTDATA vrátí hodnotu null, pokud ji volají jiné rutiny, a to i v případě, že DDL nebo trigger přihlášení volá tyto rutiny.
Data vrácená EVENTDATA po transakci jsou neplatná.
- explicitně volal
EVENTDATA - volána
EVENTDATAimplicitně - commits
- je vrácen zpět
Upozornění
EVENTDATA vrátí data XML, odeslaná klientovi jako Unicode, která pro každý znak používá 2 bajty.
EVENTDATA vrátí kód XML, který může představovat tyto body kódu Unicode:
0x0009
0x000A
0x000D
>= 0x0020 && <= 0xD7FF
>= 0xE000 && <= 0xFFFD
XML nemůže vyjádřit a nepovolí některé znaky, které se mohou objevit v identifikátorech Transact-SQL a datech. Znaky nebo data obsahující body kódu, které se nezobrazují v předchozím seznamu, se mapují na otazník (?).
Při spuštění příkazů CREATE LOGIN se hesla nezobrazujíALTER LOGIN. Tím se chrání zabezpečení přihlášení.
Vrácená schémata
FUNKCE EVENTDATA vrátí hodnotu xml datového typu. Ve výchozím nastavení se definice schématu pro všechny události instaluje v tomto adresáři: <jednotka>:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.
Webová stránka schémat XML serveru Microsoft SQL Server obsahuje také schéma událostí.
Chcete-li extrahovat schéma pro každou konkrétní událost, vyhledejte schéma komplexního typu EVENT_INSTANCE_<event_type>. Chcete-li například extrahovat schéma události DROP_TABLE , vyhledejte schéma EVENT_INSTANCE_DROP_TABLE.
Příklady
A. Dotazování na data událostí v triggeru DDL
Tento příklad vytvoří trigger DDL, který brání vytvoření nových databázových tabulek. Použití XQuery pro data XML vygenerovaná zachycením EVENTDATA příkazu Transact-SQL, který trigger aktivuje. Další informace najdete v referenční dokumentaci jazyka XQuery (SQL Server).
Poznámka:
Při použití funkce Výsledky k mřížce v aplikaci SQL Server Management Studio k dotazování prvku <TSQLCommand> se řádky v textu příkazu nezobrazí. Místo toho použijte výsledky k textu .
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
Poznámka:
Pokud chcete vrátit data události, použijte místo metody query() metodu XQuery value(). Metoda query() vrátí ve výstupu instance návratu na začátek řádku a odřádkování (CR/LF), zatímco metoda value() vykresluje instance CR/LF neviditelné ve výstupu.
B. Vytvoření tabulky protokolu s daty událostí v triggeru DDL
Tento příklad vytvoří tabulku pro úložiště informací o všech událostech na úrovni databáze a naplní tuto tabulku triggerem DDL. Použití XQuery pro data XML vygenerovaná zachycením EVENTDATA typu události a příkazu Transact-SQL.
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
Viz také
Použití funkce EVENTDATA
Spouště DDL
Oznámení událostí
Spouštěče přihlášení k systému