Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Bu işlev, sunucu veya veritabanı olayları hakkında bilgi döndürür. Bir olay bildirimi tetiklendiğinde ve belirtilen hizmet aracısı sonuçları EVENTDATA
aldığında çağrılır. DDL veya oturum açma tetikleyicisi, iç kullanımını EVENTDATA
da destekler.
Transact-SQL söz dizimi kuralları
Sözdizimi
EVENTDATA( )
Açıklamalar
EVENTDATA
verileri yalnızca doğrudan bir DDL veya oturum açma tetikleyicisinin içinde başvurulduğunda döndürür.
EVENTDATA
DDL veya oturum açma tetikleyicisi bu yordamları çağırsa bile diğer yordamlar çağırsa null döndürür.
tarafından EVENTDATA
döndürülen veriler, bir işlemden sonra geçersiz
- açıkça çağrıldı
EVENTDATA
- örtük olarak çağrıldı
EVENTDATA
- işlemeler
- geri alınır
Dikkat
EVENTDATA
, istemciye her karakter için 2 bayt kullanan Unicode olarak gönderilen XML verilerini döndürür.
EVENTDATA
şu Unicode kod noktalarını temsil eden XML döndürür:
0x0009
0x000A
0x000D
>= 0x0020 && <= 0xD7FF
>= 0xE000 && <= 0xFFFD
XML, Transact-SQL tanımlayıcılarda ve verilerde gösterilebilen bazı karakterleri ifade edemez ve izin vermez. Önceki listede gösterilmeyen kod noktaları olan karakterler veya veriler bir soru işaretine (?) eşlenir.
Veya ALTER LOGIN
deyimleri yürütülürken CREATE LOGIN
parolalar görüntülenmez. Bu, oturum açma güvenliğini korur.
Döndürülen Şemalar
EVENTDATA , xml veri türü değerini döndürür. Varsayılan olarak, tüm olayların şema tanımı şu dizine yüklenir: <sürücü>:\Program Files\Microsoft SQL Server\nnn\Tools\Binn\schemas\sqlserver\2006\11\events\events.xsd.
Microsoft SQL Server XML Şemaları web sayfasında olay şeması da bulunur.
Belirli bir olayın şemasını ayıklamak için, karmaşık türü için şemada arama.EVENT_INSTANCE_<event_type>
Örneğin, olayın şemasını ayıklamak için DROP_TABLE
şemada araması yapmak için EVENT_INSTANCE_DROP_TABLE
.
Örnekler
A. DDL tetikleyicisinde olay verilerini sorgulama
Bu örnek, yeni veritabanı tablolarının oluşturulmasını engelleyen bir DDL tetikleyicisi oluşturur. tarafından oluşturulan EVENTDATA
XML verilerine karşı XQuery kullanımı, tetikleyiciyi tetikleyen Transact-SQL deyimini yakalar. Daha fazla bilgi için bkz. XQuery Dil Başvurusu (SQL Server).
Uyarı
SQL Server Management Studio'da öğesini sorgulamak <TSQLCommand>
için Results to Grid kullanıldığında, komut metnindeki satır sonları görünmez. Bunun yerine Sonuçlardan Metne'yi kullanın.
USE AdventureWorks2022;
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
Uyarı
Olay verilerini döndürmek için query() yöntemi yerine XQuery value() yöntemini kullanın. query() yöntemi çıkışta XML ve ve kaçışlı satır başı ve satır besleme (CR/LF) örneklerini döndürürken value() yöntemi cr/lf örneklerini çıkışta görünmez hale getirir.
B. DDL tetikleyicisinde olay verileriyle günlük tablosu oluşturma
Bu örnek, tüm veritabanı düzeyindeki olaylar hakkında bilgi depolaması için bir tablo oluşturur ve bu tabloyu bir DDL tetikleyicisiyle doldurur. XQuery'nin tarafından EVENTDATA
oluşturulan XML verilerine karşı kullanılması, olay türünü ve Transact-SQL deyimini yakalar.
USE AdventureWorks2022;
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
Ayrıca Bkz.
EVENTDATA İşlevini kullanma
DDL Tetikleyicileri
Olay Bildirimleri
Oturum Açma Tetikleyicileri