多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > 在SQL Server 2005的ddl觸發器中使用eventdata( )函數

在SQL Server 2005的ddl觸發器中使用eventdata( )函數

來源:程序員人生   發布時間:2014-01-14 23:00:58 閱讀次數:3839次
問題

  在您的服務器實例中,針對SQL Server 2005的提示里,在運行數據定義語言(Create,Alter,Drop)的命令中,你就可以看到如何跟蹤DDL的活動,但我們如何存儲這些事件,用來捕獲這些DDL觸發器并且存儲在表中為反饋的信息呢?

  Solution解決方案

  在SQL Server 2005中 ,您可以通過訪問eventdata ( )函數,用來觸發ddl事件而獲取數據。 這個函數返回的是服務器或數據庫事件的信息,并以XML數據類型的方式儲存在一個變量中使用。 我們需要做的是捕捉eventdata ( )函數返回的數據,并將它儲存在數據庫的表中為反饋的信息。在把數據存儲在表中的列之前,您可以把儲存的數據直接放在XML的一列或者過程中。

  不過,由于返回的類型是XML ,我們需要運用的就是用XQuery所產生的數據的功能,以確定XML元素數據的返回,關于事件使用的索引或搜索相關的話題,請訪問SQL Server的聯機叢書。 由于這個特殊技巧,我們將使用表有關的事件。 該ddl_table_events類型說明什么數據可以捕獲一個CREATE,ALTER或者DROP表的事件。

  讓我們來用Northwind數據庫來舉一個例子。 我們將創建一個表,將用來存儲eventdata ( )函數傳回來的數據。 我們從ALTER_TABLE事件引起的架構中只將選擇一些項目; 即在每個事件中包括TSQLCommand、PostTime、LoginName和EventType這樣的字段。

  創建事件日志表

      USE NorthwindUSE Northwind
  GO
  CREATE TABLE EvtLog
  (
  PostTime DATETIME,
  LoginName NVARCHAR(100),
  EventType NVARCHAR(100),
  TSQLCommand NVARCHAR(2000)
  )
  GO GO

  創建ddl觸發

      CREATE TRIGGER trPreventTblChangeCREATE TRIGGER trPreventTblChange
  ON DATABASE
  FOR ALTER_TABLE
  AS
  DECLARE @Data XML
  SET @Data = EventData()
  INSERT EvtLog (PostTime, LoginName, EventType, TSQLCommand)
  VALUES
  (GETDATE(),
  CONVERT(NVARCHAR(100), CURRENT_USER),
  @Data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
  @Data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
  GO

  代碼walthrough

  首先,我們聲明一個XML數據類型的變量,命名為@Data;

  接下來,我們指派一個由EventData( )函數變量返回的值;

  然后,在INSERT語句中,使用XQuery和value()方法,我們在@Data變量中檢索元素的值。我們使用@Data 的value()方法,作為兩個參量,當它是零索引的時候,代表的值是1,名字是其中一個SQL服務器固定的數據類型。 值返回的是作為那個類型的實例。 并且,value()方法讓您的XML數據的格式有更好的體現。

  測試觸發

  在Northwind數據庫中,讓我們在Reion的表中添加一個新的一列。 

      USE NorthwindUSE Northwind
  GO
  ALTER TABLE Region
  ADD newColumn SMALLDATETIME NULL

  請求的EvtLog表將給您EventData ()函數返回的數據,以表格的形式存放,而我們從觸發器的定義里邊已經獲取了在XML數據里面的元素的值。

  下一步驟

  您可以在對數據庫或服務器的層次上定義ddl觸發以及捕捉使用eventdata ( )函數活動的詳細信息。 這種做法只是為了當ddl事件發生時,把活動的詳情儲存在一個日志表中。為了確保你需要驗證的事件的執行,您也可以有一個中心數據庫,將所有在數據庫和服務器層次的事件存儲起來,在如此大數額的可驗證的日志操作中進行每一個事件的處理驗證,這就既不高效也不有效。

  •   在您的SQL Server 2005實例中實施ddl觸發器與eventdata ( )函數
  •   評估事件,您的安全團隊必須經過貴公司的政策界定的基礎上進行驗證
  •   你可以在這里得到Northwind數據庫中使用的例子。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 一本中文字幕一区 | 日韩精品一区二区三区小说 | 男人天堂亚洲 | 久久久久在线 | 欧美性色欧美a在线播放 | 精品在线第一页 | 国产精品国产午夜免费福利看 | 欧美3区| 波多野结衣一区 | 在线观看免费 | 亚洲天堂视频网 | 日本欧美一区二区免费视 | 日韩欧美一区二区在线观看 | 国产欧美日韩在线一区二区不卡 | 五月天伊人网 | 国产一区日韩二区欧美三区 | 黄色网址免费 | 亚洲伊人久久大香线蕉影院 | 色诱久久av | 亚洲和欧美毛片久久久久 | 亚洲理论a中文字幕在线 | 九色九色九色在线综合888 | 国产一区亚洲二区三区 | 亚洲欧美日韩另类精品一区二区三区 | 中文字幕亚洲第一 | 欧美性free xxx| tube hdxxxxmovies右手影院 | 校园春色中文字幕 | 亚洲精品中文字幕乱码三区 | 欧美日韩精品在线 | 午夜视频高清在线aaa | 91精品久久一区二区三区 | 中文字幕一区二区三区亚洲精品 | 中文字幕视频一区二区 | 日本黄色网址大全 | 五月天精品视频播放在线观看 | 中文字幕免费高清视频 | 日本动漫免费看 | 亚洲国产一区二区三区四区五区 | 欧美国产成人免费观看永久视频 | a免费视频 |