当前位置: 代码迷 >> Sql Server >> 怎么监视表结构的修改
  详细解决方案

怎么监视表结构的修改

热度:14   发布时间:2016-04-27 10:54:51.0
如何监视表结构的修改?
比如我想监视表结构的修改,对字段的类型/大小以及增加字段/删除字段做监视,
如何获取监视的信息?

我本来想在 syscolumns 上加触发器,
但建触发器时提示 “拒绝了对对象 'syscolumns'(数据库 'DocSystem',所有者 'dbo')的 CREATE TRIGGER 权限”

该如何操作?

------解决方案--------------------
syscolumns 是系统视图,不能改的。

给个DDL触发器的语句你自己改。08版本的。用来监控整个库上对ddl操作的记录。需要写入另外一个库的表中做记录。记得不要直接抄,改一下:


 
 
 
SQL code
 CREATE TRIGGER [DDLTriggertTrace] ON DATABASE --捕获存储过程、视图、表的创建、修改、删除动作     FOR DDL_DATABASE_LEVEL_EVENTS AS     BEGIN         SET NOCOUNT ON ;         DECLARE @EventData XML = EVENTDATA() ;--返回有关服务器或数据库事件的信息,以XML格式保存。         DECLARE @ip VARCHAR(32) = ( SELECT  client_net_address                                     FROM    sys.dm_exec_connections                                     WHERE   session_id = @@SPID                                    ) ;         --记录所有操作到表中         INSERT  AuditDB_DBA.dbo.DDLEvents                 ( EventType ,                   EventDDL ,                   EventXML ,                   DatabaseName ,                   SchemaName ,                   ObjectName ,                   HostName ,                   IPAddress ,                   ProgramName ,                   LoginName                 )                 SELECT  @EventData.value('(/EVENT_INSTANCE/EventType)[1]',                                          'NVARCHAR(100)') ,                         @EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]',                                          'NVARCHAR(MAX)') ,                         @EventData ,                         DB_NAME() ,                         @EventData.value('(/EVENT_INSTANCE/SchemaName)[1]',                                          'NVARCHAR(255)') ,                         @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]',                                          'NVARCHAR(255)') ,                         HOST_NAME() ,                         @ip ,                         PROGRAM_NAME() ,                         SUSER_SNAME() ;                                  --由于存在作业,DBA操作,导致devuser帐号记录过多,所以删除devuser的数据         DELETE FROM AuditDB_DBA.dbo.DDLEvents WHERE LoginName in ('erpuser','sqlagent');     END
  相关解决方案