EVENTDATA (Transact-SQL)

Sunucu veya veritabanı olaylar hakkında bilgi verir.Bir olay bildirim ateşlendiğinde ve sonuçlar için belirtilen hizmet Aracısı döndürülen EVENTDATA denir.EVENTDATA, DDL veya oturum açma tetikleyici gövdesi içinde de kullanılabilir.

Topic link iconTransact-SQL sözdizimi kuralları

EVENTDATA( )

Remarks

EVENTDATA yalnızca doğrudan DDL veya oturum açma tetikleyici içinde başvurulan, veri döndürür.Bu yordamlar, DDL veya oturum açma tetikleyicisi ile adlandırılır bile EVENTDATA diğer yordamlar tarafından çağrılırsa null olarak verir.

EVENTDATA, adlı bir işlem örtülü veya açık olarak, tamamlar veya döndürülüyor sonra EVENTDATA tarafından döndürülen veri geçerli değil.

Uyarı

EVENTDATA XML verilerini döndürür.Bu veriler, her karakter için 2 bayt kullanan Unicode olarak istemciye gönderilir.Aşağıdaki Unicode kod noktaları EVENTDATA tarafından döndürülen XML olarak temsil edilebilir:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

Bazı karakterler görüntülenebilir Transact-SQL tanımlayıcılar ve veri ifade veya izin verilen XML değil. Soru işareti (?), karakterleri veya önceki listede gösterilen kod noktaları olan veri eşleştirilir.

Döndürülen şemalar

EVENTDATA türde bir değer verir... xml. Varsayılan olarak, tüm olaylar için şema tanımı aşağıdaki dizinde yüklüdür: C:\Program Files\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

Alternatif olarak, olay şema adresindeki yayımlanır Microsoft SQL Server XML şemaları Web sayfa'nı tıklatın.

Belirli bir olay için şema ayıklamak için , karmaşık türü için şema arayın... EVENT_INSTANCE_<event_type>. Örneğin, DROP_TABLE olay için şema ayıklamak için , şemasını arayın. EVENT_INSTANCE_DROP_TABLE.

Örnekler

C.DDL tetikleyicisi olay verileri sorgulanıyor.

Aşağıdaki örnek, veritabanında oluşturulan yeni tablolara önlemek için bir DDL tetikleyicisi oluşturur.The Transact-SQL deyim that fires the trigger is captured by using XQuery against the XML data that is generated by EVENTDATA. Daha fazla bilgi için bkz:XQuery Language Reference (Veritabanı Altyapısı).

Not

Sorgu zaman <TSQLCommand> kullanarak öğe Kılavuz sonuçlar in SQL Server Management Studio, satır sonları, komutun metin görünmüyor. Kullanımı sonuçlar metin yerine.

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

Not

Olay verileri dönmek istediğinizde, the XQuery kullanmanızı öneririz Value() yerine, yöntemQuery() yöntem.The query() yöntem returns XML and ampersand-escaped carriage return and line feed (CR/LF) instances in the output, while the value() yöntem renders CR/LF instances invisible in the output.

b.Bir günlük oluşturma tablo DDL tetikleyicisi olay veriyle

Aşağıdaki örnek, tüm veritabanı düzey olaylarla ilgili bilgileri depolamak için bir tablo oluşturur ve DDL tetikleyicisi içeren tabloyu doldurur.Olay türünü ve Transact-SQL deyim tarafından oluşturulan XML verilerini karşı XQuery kullanarak yakalanan 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.Bir olay örnek şemasının bir bölümü karşı doğrulanıyor

Aşağıdaki örnek doğrulama bir DROP_TABLE Olay tarafından döndürülen şemayla 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.