程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 在SQL Server 2005的ddl觸發器中使用eventdata()函數

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

編輯:關於SqlServer

問題

在您的服務器實例中,針對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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved