如何更改SQL Server架构,尤其是“列名”更改

时间:2010-10-22 12:54:38

标签: sql sql-server tsql sql-server-2005 ddl-trigger

我使用触发器来跟踪DDL更改,但是当我从SQL Server Management Studio更改列名时,触发器无效?

create TRIGGER trgLogDDLEvent ON DATABASE
  FOR DDL_DATABASE_LEVEL_EVENTS
FOR
AS
DECLARE @data XML
SET @data = EVENTDATA()
IF @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)')
<> 'CREATE_STATISTICS'
INSERT INTO db_trc_DDLChangeLog
(
EventType,
ObjectName,
ObjectType,
tsql,
RecDate,
HostName
)
VALUES (
@data.value('(/EVENT_INSTANCE/EventType)[1]',
'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/ObjectName)[1]',
'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/ObjectType)[1]',
'nvarchar(100)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]',
'nvarchar(max)'),
getdate(),
 HOST_NAME()
) ;
GO

--select * from db_trc_DDLChangeLog
--create table db_trc_DDLChangeLog
--(
--EventType varchar(max),
--ObjectName varchar(max),
--ObjectType varchar(max),
--tsql varchar(max),
--RecDate datetime,
--HostName varchar(max)
--)

1 个答案:

答案 0 :(得分:0)

您不会专门为列更改获取事件。相反,您将收到一个ALTER_TABLE事件,表明该表已更改。

当你说SQL Server控制台你的意思是管理工作室?如果是这样,请查看它生成的用于更改表的SQL。它可能是创建一个新表,将数据复制到它,删除旧表并重命名新表,这样您就会看到许多事件,如CREATE_TABLEDROP_TABLE