SQL SERVER 2005支持DDL触发器,不过网上的介绍的应用场合一般都是来阻止非法用户对数据库结构的修改,其实既然可以监视数据结构的变化,就可以记录数据结构更改记录咯。于是就做了个数据库版本控制的小工具,主要就是利用DDL触发器来捕捉提交的更改。
    1.创建控制支撑的数据库DBController记录数据库更改历史。
      数据库核心表 t_version_details
       DDL(Data Definition Language)触发器实现数据库版本控制   
2.核心触发器
     trigger sql:
DDL(Data Definition Language)触发器实现数据库版本控制CREATE TRIGGER Trig_DBVersionController
DDL(Data Definition Language)触发器实现数据库版本控制
ON DATABASE
DDL(Data Definition Language)触发器实现数据库版本控制
FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE,
DDL(Data Definition Language)触发器实现数据库版本控制    CREATE_FUNCTION, ALTER_FUNCTION, DROP_FUNCTION,
DDL(Data Definition Language)触发器实现数据库版本控制    CREATE_INDEX, ALTER_INDEX, DROP_INDEX,
DDL(Data Definition Language)触发器实现数据库版本控制    CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE,
DDL(Data Definition Language)触发器实现数据库版本控制    CREATE_TRIGGER, ALTER_TRIGGER, DROP_TRIGGER,
DDL(Data Definition Language)触发器实现数据库版本控制    CREATE_VIEW, ALTER_VIEW, DROP_VIEW
DDL(Data Definition Language)触发器实现数据库版本控制
AS
DDL(Data Definition Language)触发器实现数据库版本控制    
SET NOCOUNT ON
DDL(Data Definition Language)触发器实现数据库版本控制    
DECLARE @data AS xml
DDL(Data Definition Language)触发器实现数据库版本控制    
DECLARE @clientUser AS nvarchar(128)
DDL(Data Definition Language)触发器实现数据库版本控制    
DECLARE @spid AS nvarchar(128)
DDL(Data Definition Language)触发器实现数据库版本控制    
DECLARE @serverName AS nvarchar(128)
DDL(Data Definition Language)触发器实现数据库版本控制    
DECLARE @dbName AS nvarchar(128)
DDL(Data Definition Language)触发器实现数据库版本控制    
DECLARE @dbid AS int
DDL(Data Definition Language)触发器实现数据库版本控制    
DECLARE @objName AS nvarchar(512)
DDL(Data Definition Language)触发器实现数据库版本控制
DDL(Data Definition Language)触发器实现数据库版本控制    
SELECT @data =EVENTDATA()
DDL(Data Definition Language)触发器实现数据库版本控制    
SELECT @spid = @data.value('(/EVENT_INSTANCE/SPID)[1]','nvarchar(128)')
DDL(Data Definition Language)触发器实现数据库版本控制    
SELECT @serverName = @data.value('(/EVENT_INSTANCE/ServerName)[1]','nvarchar(256)')
DDL(Data Definition Language)触发器实现数据库版本控制    
SELECT @dbName = @data.value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(128)')
DDL(Data Definition Language)触发器实现数据库版本控制    
SELECT @objName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(128)')
DDL(Data Definition Language)触发器实现数据库版本控制
DDL(Data Definition Language)触发器实现数据库版本控制    
SELECT @dbid = dbid FROM sys.sysdatabases 
DDL(Data Definition Language)触发器实现数据库版本控制    
WHERE name = @dbName 
DDL(Data Definition Language)触发器实现数据库版本控制
    )
    3.只要在目标数据库上创建这个触发器就可以记录版本了

相关文章:

  • 2021-09-28
  • 2022-01-07
  • 2021-12-11
  • 2021-11-09
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-16
  • 2022-12-23
  • 2021-10-05
  • 2021-08-28
  • 2021-09-26
相关资源
相似解决方案