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

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database

이 함수는 서버 또는 데이터베이스 이벤트 정보를 반환합니다.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. DDL 또는 로그온 트리거는 EVENTDATA의 내부 사용도 지원합니다.A DDL or logon trigger also support internal use of EVENTDATA.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙Topic link icon Transact-SQL Syntax Conventions

구문Syntax

  
EVENTDATA( )  

설명Remarks

EVENTDATA는 DDL 또는 로그온 트리거 내에 직접 참조되는 경우에만 데이터를 반환합니다.EVENTDATA returns data only when referenced directly inside of a DDL or logon trigger. EVENTDATA는 DDL 또는 로그온 트리거가 해당 루틴을 호출하는 경우에도 다른 루틴이 이벤트를 호출하면 null을 반환합니다.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는 각 문자에 2바이트를 사용하는 유니코드로 클라이언트에 전송되는 XML 데이터를 반환합니다.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 스키마 웹 페이지에도 이벤트 스키마가 있습니다.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. DDL 트리거에서 이벤트 데이터 쿼리Querying event data in a DDL trigger

이 예제에서는 새 데이터베이스 테이블 만들기를 차단하는 DDL 트리거를 만듭니다.This example creates a DDL trigger that prevents creation of new database tables. EVENTDATA에서 생성한 XML 데이터에 XQuery를 사용하면 트리거를 실행하는 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  

참고

이벤트 데이터를 반환하려면 query() 메서드 대신 XQuery value() 메서드를 사용합니다.To return event data, use the XQuery value() method instead of the query() method. query() 메서드는 XML 및 출력에서 앰퍼샌드로 이스케이프된 CR/LF(캐리지 리턴 및 줄 바꿈) 인스턴스를 반환하지만 value() 메서드는 출력에서는 볼 수 없는 CR/LF 인스턴스를 표시합니다.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.B. DDL 트리거에서 이벤트 데이터가 있는 로그 테이블 만들기Creating 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. EVENTDATA에서 생성된 XML 데이터에 XQuery를 사용하면 이벤트 유형과 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 트리거Logon Triggers