EVENTDATA (Transact-SQL)
Zwraca informacje o zdarzeniach serwera lub bazy danych.EVENTDATA jest wywoływane, gdy firespowiadomienie o zdarzenie, a wyniki są zwracane do określonej usługa broker. EVENTDATA można również wewnątrz ciała wyzwalacza DDL lub logowania.
Składnia
EVENTDATA( )
Uwagi
EVENTDATA zwraca dane tylko wtedy, gdy odwołuje się do bezpośrednio z wyzwalaczem DDL lub logowania.EVENTDATA zwraca null , jeśli jest wywoływana przez innych procedur, nawet jeśli te procedury są wywoływane przez wyzwalacz DDL lub logowania.
Po transakcji o nazwie EVENTDATA, bezpośrednio lub pośrednio, zatwierdza lub przywróceniu danych zwróconych przez EVENTDATA jest nieprawidłowa.
![]() |
---|
EVENTDATA zwraca dane XML.Te dane, jest wysyłany do klient jako Unicode, który wykorzystuje 2 bajty dla każdego znaku.Następujące punkty kodowe Unicode może być reprezentowany w kodzie XML, który jest zwracany przez EVENTDATA: 0x0009 0x000A 0x000D >= 0x0020 && <= 0xD7FF >= 0xE000 && <= 0xFFFD Niektóre znaki, które mogą być wyświetlane w Transact-SQL są identyfikatory i danych nie można wyrazić lub dopuszczalna XML.Znaki lub dane, które mają nie są wyświetlane na liście poprzednich punktów kodowych są mapowane na znak zapytania (?). |
Schematy zwrócone
EVENTDATA zwraca wartość typu xml.Domyślnie definicji schematu dla wszystkich zdarzeń jest instalowane w następującym katalogu: C:\Program Files\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.
Alternatywnie schematu zdarzenie jest publikowana w Microsoft SQL Server schematów XML stronasieci Web.
Aby wyodrębnić schemat wszelkie określone zdarzenie, wyszukiwanie schematu typu złożonego EVENT_INSTANCE_<event_type>.Na przykład, aby wyodrębnić schemat DROP_TABLE zdarzenie, wyszukiwanie schematu dla EVENT_INSTANCE_DROP_TABLE.
Przykłady
A.Kwerendy danych zdarzenie w wyzwalaczu DDL
Poniższy przykład tworzy wyzwalacza DDL , aby zapobiec tworzony w bazie danych nowych tabel.Transact-SQLinstrukcja , że fires wyzwalacz przechwytywania przy użyciu XQuery przeciwko danych XML, który jest generowany przez EVENTDATA. Aby uzyskać więcej informacji, zobacz Skorowidz języka XQuery (aparat bazy danych).
Ostrzeżenie
Podczas przeszukiwania <TSQLCommand> elementu za pomocą wyniki do siatki w SQL Server Management Studio, podziały wierszy w tekście polecenia nie są wyświetlane.Użycie wyniki do tekstu zamiast.
USE AdventureWorks2008R2;
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
Ostrzeżenie
Należy zwrócić dane zdarzenie , zaleca się używać XQuery value() metoda zamiast query() metoda.Query() metoda zwraca XML i przewozu wyjściowym handlowe i powrotu i wysuwu wiersza (CR/LF) wystąpień w wynikach podczas value()metoda renderuje niewidoczny w wyniku wystąpienia CR/LF.
B.Tworzenie dziennika tabela z danymi zdarzenie w wyzwalaczu DDL
Poniższy przykład tworzy tabela do przechowywania informacji o wszystkich zdarzeniach poziom bazy danych i wypełnia tabela z wyzwalaczem DDL .Typ zdarzenie i Transact-SQL instrukcja są przechwytywane przy użyciu XQuery przeciwko dane XML, wygenerowane przez EVENTDATA.
USE AdventureWorks2008R2;
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
C.Sprawdzanie poprawnościwystąpienie zdarzenieprzed częścią schematu
Poniższy przykład sprawdza poprawność DROP_TABLE zdarzenie schematem zwrócony przez EVENTDATA.
IF EXISTS (SELECT * FROM sys.xml_schema_collections WHERE name='EventsXML')
DROP XML SCHEMA COLLECTION EventsXML ;
GO
DECLARE @x xml
SET @x = (SELECT * FROM OPENROWSET(BULK 'c:\Program Files\Microsoft SQL Server\90\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd', single_clob) AS x)
CREATE XML SCHEMA COLLECTION EventsXML AS @x ;
GO
DECLARE @x xml(XSDEVENTS)
DECLARE @y xml
DECLARE @n nvarchar(max)
SELECT @y = EVENTDATA()
SELECT @n = @y
SELECT @n = REPLACE(@n, '<EVENT_INSTANCE', '<EVENT_INSTANCE xmlns=''https://schemas.microsoft.com/sqlserver/2006/eventdata'' xmlns:xsi=''http://www.w3.org/2001/XMLSchema-instance'' xsi:type=''EVENT_INSTANCE_DROP_TABLE''')
SELECT @x = @n -- This causes the validation.