eventdata (Transact-sql)

Sunucu veya veritabanı olaylar hakkında bilgi verir. Olay bildirim patlar ve belirtilen hizmet broker döndürülür eventdata denir. eventdata ddl ya da logon tetikleyici gövdesi içinde de kullanılabilir.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

EVENTDATA( )

Açıklamalar

eventdata yalnızca doğrudan ddl ya da logon tetikleyici içinde başvurulan veri döndürür. Bu yordamları ddl ya da logon tetikleyici tarafından denir bile eventdata diğer yordamlar tarafından çağrıldığında null döndürür.

Sonra eventdata, denilen 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, 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 temsil edilebilir:

0x0009

0x000A

0x000D

>= 0x0020 && <= 0xD7FF

>= 0xE000 && <= 0xFFFD

Bazı karakterler görünebilir Transact-SQLtanımlayıcıları ve veri değil duracak veya XML caiz. Soru işareti (?), karakterleri veya önceki listede gösterilmez kod noktaları veri eşleştirilir.

Döndürülen şemaları

eventdata işlevi türü değeri xml. Varsayılan olarak, tüm olayları şema tanımına aşağıdaki dizine yüklenir: C:\Program Files\Microsoft SQL Server\110\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.

Alternatif olarak, olay şema at Yayınlanan Microsoft SQL Server xml şemalarını Web sayfası.

-E doğru hulasa belirli bir olay için şema, şema karmaşık türü için arama EVENT_INSTANCE_<event_type>. Örneğin,-e doğru hulasa drop_table olay şema, şema arama 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. Transact-SQLTetiği harekete beyanı yakalanan eventdata tarafından oluşturulan xml verilerini karşı XQuery kullanarak. Daha fazla bilgi için, bkz. XQuery dil başvurusu (SQL Server).

[!NOT]

Ne zaman sen sorgu <TSQLCommand>öğesini kullanarak sonuçları kılavuz de SQL Server Management Studio, satır sonlarını komut metni görünmez. Kullanım sonuçları metin onun yerine.

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

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

[!NOT]

Olay verileri dönmek istediğinizde, XQuery kullanmanızı öneririz value() yöntemi yerine query() yöntemi. Query() yöntemi dönüş verir xml ve satırbaşı işareti kaçtı ve satır besleme (cr/lf) örnekleri Çıkışta, süre value() yöntemi cr ve lf örnekleri çıktısında görünmez yapar.

B.ddl tetikleyici olay verilerle günlük tablosu oluşturma

Aşağıdaki örnek, tüm veritabanı düzeyi olaylarla ilgili bilgileri depolamak için bir tablo oluşturur ve ddl tetikleyici içeren tabloyu doldurur. Olay türünü ve Transact-SQLdeyimi yakalanan XQuery karşı tarafından oluşturulan xml verilerini kullanarak EVENTDATA.

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

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

C.Bir olay örneği karşı şemanın bir parçası doğrulanıyor

Aşağıdaki örnek doğrulayan bir DROP_TABLEolay 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.

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.

Ayrıca bkz.

Kavramlar

eventdata işlevini kullanma

ddl Tetikleyicileri

Olay bildirimleri

Oturum Açma Tetikleyicileri