2012-04-12 18 views
0

我拿到了這個示例代碼。它適用於所有T-SQL代碼,但如果我通過鼠標單擊在SSMS中刪除表,事件不會被跟蹤 - 問題是爲什麼?DDL觸發器肯定無法啓動,爲什麼?

-- create the table to store the events 
CREATE TABLE dbo.CREATE_TABLE_LOG (
eventTime datetime 
, eventOwner nvarchar(100) 
, eventTSQL nvarchar(3000) 
) 
GO 
-- create the DDL trigger 
CREATE TRIGGER DDLTrigger_CreateTable ON DATABASE FOR create_table, alter_table, drop_table 
AS 
DECLARE @data XML 
SET @data = EVENTDATA() 
INSERT INTO CREATE_TABLE_LOG 
VALUES (
GETDATE() 
, CURRENT_USER 
, @data.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 
'nvarchar(1000)') 
) 
GO 

回答

1

我檢查了兩個SQL Server 2005和SQL Server 2008上,給出的記錄表並提供了DDL觸發器,它已經正確記錄下降,無論我如何在SSMS放棄了它。

您能否提供您正在使用的確切菜單/上下文菜單命令,然後仔細檢查是否沒有在1個數據庫中刪除該表,並在另一個數據庫中讀取日誌表(例如您意外在主服務器上創建了重複日誌表)。

+0

Thx爲您的問題。在雙工檢查我的工作後,我會提供更多信息。 – Ice 2012-04-13 21:42:36

+0

我按照提到的檢查過,並且:它工作正常。如果在SSMS中單擊並且重新創建表...(insert into語句和重命名錶未記錄),則ALTER Table有點棘手。 – Ice 2012-04-16 11:14:08

相關問題