eventdata (Transact-SQL)

Sunucu veya veritabanı olaylar hakkında bilgi verir.Bir olay bildirim tetikler ve sonuçlar belirtilen hizmet broker için döndürülen eventdata denir.eventdata DDL veya oturum açma tetikleyici gövdesi içinde de kullanılabilir.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

EVENTDATA( )

Açıklamalar

eventdata yalnızca doğrudan DDL veya oturum açma tetikleyici içinde başvuruda bulunduğunda verileri döndürür.Diğer yordamlar tarafından çağrılırsa eventdata null değerini, olmasa bu yordamları DDL veya oturum açma Tetikleyici tarafından verilir.

Sonra eventdata adlı bir hareket örtük veya açık olarak, tamamlar veya döndürülüyor eventdata tarafından döndürülen veri geçerli değil.

Dikkat notuDikkat

eventdata xml verileri döndürür.Bu veriler, istemci , her karakter için 2 bayt kullanan Unicode olarak 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

Görülebilir bazı karakterler Transact-SQL tanımlayıcıları ve veri yok edilemiyorsa veya izin verilen xml.Soru işareti (?) karakteri veya kod noktaları önceki listede gösterilmez olan veri eşleştirilir.

Döndürülen şemaları

eventdata türünde bir deðer döndüren xml.Varsayılan olarak, tüm olaylar için şema tanımı aşağıdaki dizine yüklenir: C:\Program Files\Microsoft SQL Server\100\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

Alternatif olarak, olay şema adresindeki yayımlanmış Microsoft SQL Server xml şemalarını Web sayfa.

ayıklamak için belirli bir olayiçin şema, şema karmaşık türü için arama EVENT_INSTANCE_<event_type>.Örneğin, ayıklamak için drop_table olayşema, şema aramak EVENT_INSTANCE_DROP_TABLE.

Örnekler

A.DDL tetikleyici olay verileri sorgulama

Aşağıdaki örnek veritabanında oluşturulan yeni tablolar önlemek için DDL tetikleyici oluşturur.Tetiği hareketeTransact-SQLdeyim yakalanan XQuery eventdata tarafından oluşturulan xml verilerini karşı kullanarak. Daha fazla bilgi için, bkz. XQuery dil başvurusu (veritabanı altyapısı).

Not

Sorguladığınızda <TSQLCommand> öğesini kullanarak Kılavuz sonuçları , SQL Server Management Studio, komut metni satır sonlarını görünmüyor.Use sonuçları metin onun yerine.

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

Not

olay verileri dönmek istediğinizde, XQuerykullanmanızı öneririzvalue() yöntem yerine query()yöntem. Query() yöntem ve satır besleme (cr/lf) örnekleri Çıkışta, sırada value()yöntem cr/lf örnekleri çıktıda görünmez yapar.

B.DDL tetikleyici olay verilerle günlük tablo oluşturma

Aşağıdaki örnek, tüm veritabanı düzey olaylarla ilgili bilgileri depolamak için bir tablo oluşturur ve DDL tetikleyici içeren tablo doldurur.olay türünü ve Transact-SQLdeyim tarafından oluşturulan xml verilerini karşı XQuery kullanarak yakalanan 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.Şemanın bir parçası karşıörnek olaydoğrulanıyor

Aşağıdaki örnek doğrulayan bir DROP_TABLE olay tarafından döndürülen şema karşı 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.