Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Ta funkcja zwraca informacje o zdarzeniach serwera lub bazy danych. Gdy zostanie wyzwolone powiadomienie o zdarzeniu, a określony broker usługi otrzyma wyniki, EVENTDATA
jest wywoływany. Wyzwalacz DDL lub logowania również obsługuje wewnętrzne użycie EVENTDATA
.
Transact-SQL konwencje składni
Składnia
EVENTDATA( )
Uwagi
EVENTDATA
Zwraca dane tylko wtedy, gdy odwołuje się bezpośrednio wewnątrz wyzwalacza DDL lub logowania.
EVENTDATA
Zwraca wartość null, jeśli wywołują ją inne procedury, nawet jeśli wyzwalacz DDL lub logowania wywołuje te procedury.
Dane zwrócone przez usługę EVENTDATA
są nieprawidłowe po transakcji, która
- nazwana
EVENTDATA
jawnie - wywoływana
EVENTDATA
niejawnie - zatwierdzenia
- jest wycofany
Ostrożność
EVENTDATA
Zwraca dane XML wysyłane do klienta jako Unicode, który używa 2 bajtów dla każdego znaku.
EVENTDATA
zwraca kod XML, który może reprezentować następujące punkty kodu Unicode:
0x0009
0x000A
0x000D
>= 0x0020 && <= 0xD7FF
>= 0xE000 && <= 0xFFFD
Kod XML nie może wyrazić i nie zezwoli na niektóre znaki, które mogą być wyświetlane w identyfikatorach i danych Transact-SQL. Znaki lub dane, które mają punkty kodu, które nie są wyświetlane na poprzedniej liście, są mapowane na znak zapytania (?).
Hasła nie są wyświetlane podczas CREATE LOGIN
wykonywania instrukcji lub ALTER LOGIN
. Chroni to zabezpieczenia logowania.
Zwrócone schematy
Funkcja EVENTDATA zwraca wartość xml typu danych. Domyślnie definicja schematu dla wszystkich zdarzeń jest instalowana w tym katalogu: <drive>:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.
Strona sieci Web Schematy XML programu Microsoft SQL Server zawiera również schemat zdarzeń.
Aby wyodrębnić schemat dla dowolnego określonego zdarzenia, wyszukaj schemat typu złożonego EVENT_INSTANCE_<event_type>
. Aby na przykład wyodrębnić schemat DROP_TABLE
zdarzenia, wyszukaj schemat .EVENT_INSTANCE_DROP_TABLE
Przykłady
Odp. Wykonywanie zapytań dotyczących danych zdarzeń w wyzwalaczu DDL
W tym przykładzie tworzony jest wyzwalacz DDL, który uniemożliwia tworzenie nowych tabel bazy danych. Użycie zapytania XQuery względem danych XML generowanych przez EVENTDATA
przechwycenie instrukcji Transact-SQL wyzwalacza. Aby uzyskać więcej informacji, zobacz XQuery Language Reference (SQL Server).
Uwaga
W przypadku używania funkcji Wyniki do siatki w programie SQL Server Management Studio w celu wykonania zapytania <TSQLCommand>
względem elementu podziały wierszy w tekście polecenia nie są wyświetlane. Zamiast tego użyj wyników do tekstu .
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
Uwaga
Aby zwrócić dane zdarzenia, użyj metody XQuery value() zamiast metody query(). Metoda query() zwraca wystąpienia powrotu karetki XML i ampersand-escaped (CR/LF) w danych wyjściowych, podczas gdy metoda value() renderuje wystąpienia CR/LF niewidoczne w danych wyjściowych.
B. Tworzenie tabeli dzienników z danymi zdarzeń w wyzwalaczu DDL
W tym przykładzie utworzono tabelę do przechowywania informacji o wszystkich zdarzeniach na poziomie bazy danych i wypełniliśmy tę tabelę wyzwalaczem DDL. Użycie zapytania XQuery względem danych XML generowanych przez EVENTDATA
przechwycenie typu zdarzenia i instrukcji 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
Zobacz też
Korzystanie z funkcji EVENTDATA
wyzwalacze DDL
Powiadomienia o zdarzeniach
Wyzwalacze logowania