EVENTDATA (Transact-SQL)

Zwraca informacje o zdarzeniach serwera lub bazy danych.EVENTDATA nazywa się po uruchomieniu powiadomienie o zdarzeniu, a wyniki są zwracane do brokera określonej usługa.Można również EVENTDATA wewnątrz treści wyzwalacza DDL lub logowania.

Topic link iconKonwencje składni języka Transact-SQL

EVENTDATA( )

Remarks

EVENTDATA zwraca dane tylko wtedy, gdy wywoływany bezpośrednio z wewnątrz wyzwalacza DDL lub logowania.EVENTDATA zwraca wartość null, gdy jest ona wywoływana przez inne procedury, nawet jeśli te procedury są wywoływane przez wyzwalacz DDL lub logowania.

Dane zwrócone przez EVENTDATA nie jest prawidłowy, po transakcji, która wywołała EVENTDATA, albo jawnie lub niejawnie, zatwierdza lub zostanie przywrócona.

Ostrzeżenie

EVENTDATA zwraca dane XML.To dane są przesyłane do klient w standardzie Unicode, który używa 2 bajtów dla każdego znaku.Punkty kodu Unicode może być reprezentowany w języku 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 identyfikatory i dane nie są dopuszczalne w formacie XML lub expressible. Znaki lub dane, których nie są wyświetlane na liście poprzednich punktów kodowych są mapowane na znak zapytania (?).

Schematy zwrot

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 zdarzenie schematu jest publikowana w Schematy XML Microsoft SQL Server Strona sieci Web.

Aby wyodrębnić schemat dla każdej określonego zdarzenie, wyszukiwanie schematu dla typu złożonego EVENT_INSTANCE_<event_type>. Na przykład aby wyodrębnić schemat DROP_TABLE zdarzenie, wyszukiwanie schemat EVENT_INSTANCE_DROP_TABLE.

Przykłady

A.Wykonywanie kwerendy danych zdarzenie wyzwalacz DLL

Poniższy przykład tworzy wyzwalacz DLL uniemożliwić tworzony w bazie danych nowych tabel.The Transact-SQL instrukcja that fires the trigger is captured by using XQuery against the XML data that is generated by EVENTDATA. Aby uzyskać więcej informacji zobaczXQuery Language Reference (aparat bazy danych).

Uwaga

Gdy kwerenda jest wykonywana <TSQLCommand> element przy użyciu Wyniki do siatki in SQL Server Management Studio, podziałów wierszy w tekście polecenia nie są wyświetlane. Użycie Wyniki do tekstu zamiast niego.

USE AdventureWorks;
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

Należy zwrócić dane zdarzenie, zaleca się użycie XQuery Value() metoda zamiast Query() metoda.The query() metoda returns XML and ampersand-escaped carriage return and line feed (CR/LF) instances in the output, while the value() metoda renders CR/LF instances invisible in the output.

B.Tworzenie tabela dziennika zdarzeń danymi w wyzwalacz DLL

W poniższym przykładzie jest tworzona tabela do przechowywania informacji o wszystkich zdarzeniach poziom bazy danych i wypełnia tabeli z wyzwalacz DLL.Typ zdarzenie i Transact-SQL Instrukcja są przechwytywane przy użyciu XQuery dla danych XML wygenerowany przez EVENTDATA.

USE AdventureWorks;
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ści jest wystąpienie zdarzenie przed częścią schematu

W poniższym przykładzie sprawdza poprawność DROP_TABLE Zdarzenie schematem zwrócone 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.