--创建空数据库
create database chl_fromempty
use chl_fromempty
--创建表存储xml数据
create table chl_ddlevendate(fdata xml,fid int identity(1,1),fdatetime datetime default getdate())
--创建DDL触发器获取触发事件的详细信心
create trigger chl_tableddl_getdata on database
for create_table,alter_table,drop_table
as
insert into chl_ddlevendate(fdata) select EVENTDATA()
--测试,创建表
create table chl001(a int,b char(1),c date)
--查询获取到的XML
select * from chl_ddlevendate
--以下为获取到的xml的内容
<EVENT_INSTANCE>
<EventType>CREATE_TABLE</EventType>
<PostTime>2019-08-15T09:48:23.967</PostTime>
<SPID>61</SPID>
<ServerName>HANLIN-PC</ServerName>
<LoginName>sa</LoginName>
<UserName>dbo</UserName>
<DatabaseName>chl_fromempty</DatabaseName>
<SchemaName>dbo</SchemaName>
<ObjectName>chl001</ObjectName>
<ObjectType>TABLE</ObjectType>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
<CommandText>create table chl001(a int,b char(1),c date)
</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>
--关于EVENTDATA 函数
--https://docs.microsoft.com/zh-cn/sql/relational-databases/triggers/use-the-eventdata-function?view=sql-server-2017
--获取节点的值和节点的信息
SELECT fdata.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') 获取节点的值 from chl_ddlevendate
--结果
获取节点的值
create table chl001(a int,b char(1),c date)
SELECT fdata.query('(/EVENT_INSTANCE/TSQLCommand)') 节点的信息 from chl_ddlevendate
--结果
节点的信息
<TSQLCommand><SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" /><CommandText>create table chl001(a int,b char(1),c date)
</CommandText></TSQLCommand>