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
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
EVENTDATA
implicitně - 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ů ALTER LOGIN
se hesla nezobrazujíCREATE 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