sql server 以EVENTDATA 函數爲例獲取xml的值

--創建空數據庫
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>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章