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.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

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.

PrzestrogaPrzestroga

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.