2012-04-12 41 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

相关问题