EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Эта функция возвращает сведения о событиях сервера или базы данных.This function returns information about server or database events. Когда создается уведомление о событии и результаты возвращаются на соответствующий компонент Service Broker, вызывается EVENTDATA.When an event notification fires, and the specified service broker receives the results, EVENTDATA is called. Также использование EVENTDATA поддерживается в триггерах DDL и триггерах входа.A DDL or logon trigger also support internal use of EVENTDATA.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

  
EVENTDATA( )  

RemarksRemarks

Функция EVENTDATA возвращает данные только в том случае, если она вызвана непосредственно из триггера DDL или триггера входа.EVENTDATA returns data only when referenced directly inside of a DDL or logon trigger. EVENTDATA всегда возвращает значение NULL, если ее вызывают другие подпрограммы, даже те, которые вызваны с помощью триггера DDL или триггера входа.EVENTDATA returns null if other routines call it, even if a DDL or logon trigger calls those routines.

Данные, возвращаемые функцией EVENTDATA, становятся недопустимыми после транзакции, которая:Data returned by EVENTDATA is invalid after a transaction that

  • вызывает EVENTDATA явным образом;called EVENTDATA explicitly
  • вызывает EVENTDATA явным образом;called EVENTDATA implicitly
  • зафиксирована;commits
  • отменена.is rolled back

Внимание!

EVENTDATA возвращает данные в формате XML, которые передаются клиенту в кодировке Юникод с 2-байтовым представлением символов.EVENTDATA returns XML data, sent to the client as Unicode that uses 2 bytes for each character. EVENTDATA возвращает XML-код, который может представлять такие кодовые точки в Юникод:EVENTDATA returns XML that can represent these Unicode code points:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

В XML невозможно выразить и использовать некоторые символы, встречающиеся в идентификаторах и данных Transact-SQLTransact-SQL.XML cannot express, and will not permit, some characters that can appear in Transact-SQLTransact-SQL identifiers and data. Символы или данные с элементами кода, не указанными в приведенном выше списке, сопоставляются с вопросительным знаком (?).Characters or data that have code points not shown in the previous list are mapped to a question mark (?).

Пароли не отображаются при выполнении инструкций CREATE LOGIN и ALTER LOGIN.Passwords do not display when CREATE LOGIN or ALTER LOGIN statements execute. Это сделано для безопасности входа.This protects login security.

Возвращаемые схемыSchemas Returned

Функция EVENTDATA возвращает значение с типом данных xml.EVENTDATA returns a value of data type xml. По умолчанию определение схемы для всех событий устанавливается в следующем каталоге: C:\Program Files\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.By default, the schema definition for all events installs in this directory: C:\Program Files\Microsoft SQL Server\nnnC:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

Кроме того, схема событий опубликована на веб-странице Microsoft SQL Server XML Schemas (Схемы XML Microsoft SQL Server).The Microsoft SQL Server XML Schemas web page also has the event schema.

Чтобы извлечь схему для какого-то конкретного события, нужно выполнить поиск в схеме для составного типа EVENT_INSTANCE_<event_type>.To extract the schema for any particular event, search the schema for the Complex Type EVENT_INSTANCE_<event_type>. Например, чтобы извлечь схему для события DROP_TABLE, выполните поиск в схеме по EVENT_INSTANCE_DROP_TABLE.For example, to extract the schema for the DROP_TABLE event, search the schema for EVENT_INSTANCE_DROP_TABLE.

ПримерыExamples

A.A. Запрос данных о событии в триггере DDLQuerying event data in a DDL trigger

В этом примере создается триггер DDL, который блокирует создание таблиц в базе данных.This example creates a DDL trigger that prevents creation of new database tables. Примените запрос XQuery к XML-данным, сформированным функцией EVENTDATA, чтобы получить инструкцию Transact-SQLTransact-SQL, которая вызвала срабатывание триггера.Use of XQuery against the XML data generated by EVENTDATA captures the Transact-SQLTransact-SQL statement that fires the trigger. Дополнительные сведения см. в статье Справочник по языку XQuery (SQL Server).See XQuery Language Reference (SQL Server) for more information.

Примечание

При использовании представления В виде сетки в запросе SQL Server Management StudioSQL Server Management Studio к элементу <TSQLCommand>, символы разрыва строк в тексте команды не отображаются.When using Results to Grid in SQL Server Management StudioSQL Server Management Studio to query the <TSQLCommand> element, line breaks in the command text do not appear. Используйте вместо этого представление В виде текста.Use Results to Text instead.

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

Примечание

Чтобы получить данные о событии используйте метод XQuery value() , а не query() .To return event data, use the XQuery value() method instead of the query() method. Метод query() возвращает XML-данные, содержащие символы возврата каретки и переноса строки (CR/LF), экранированные амперсандом, а метод value() не отображает эти символы.The query() method returns XML and ampersand-escaped carriage return and line feed (CR/LF) instances in the output, while the value() method renders CR/LF instances invisible in the output.

Б.B. Создание таблицы журнала с данными о событии в триггере DDLCreating a log table with event data in a DDL trigger

В этом примере для хранения сведений обо всех событиях уровня базы данных создается таблица, которая заполняется триггером DDL.This example creates a table for information storage about all database level events, and populates that table with a DDL trigger. Примените запрос XQuery к XML-данным, сформированным функцией EVENTDATA, чтобы получить тип события и инструкцию Transact-SQLTransact-SQL.Use of XQuery against the XML data generated by EVENTDATA captures the event type and the Transact-SQLTransact-SQL statement.

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

См. также:See Also

Использование функции EVENTDATA Use the EVENTDATA Function
Триггеры DDL DDL Triggers
Уведомления о событиях Event Notifications
Триггеры входаLogon Triggers