SQL 自动记录存储过程,表,函数的创建修改和删除 -相当于SVN一样

     在项目开发过程中,项目管理者通常都很希望对项目的开发进展有一个日志的记录。代码的记录和管理可以通过TFS或者VSS等工具去管理。但是数据库却没有记录开发日志这一功能。这在实际开发中很不方便,特别是大量的存储过程改动。

 那么针对这一个需求,在数据库中建立一个数据库的触发器,记录存储过程的代码修改!

  1 --第一步:建库建表
  2 
  3 if  exists(select 1 from master.dbo.sysdatabases where name='AuditDB')
  4 
  5 drop database AuditDB
  6 
  7 go
  8 
  9  
 10 
 11 create database AuditDB
 12 
 13 go
 14 
 15 use AuditDB
 16 
 17 go
 18 
 19 if object_id('DDLEvents','u')is not null
 20 
 21 drop table DDLEvents
 22 
 23 go
 24 
 25 create table DDLEvents(
 26 
 27     EventDate datetime default (getdate()) NOT null,      --事件时间
 28 
 29     EventType nvarchar(64) null,                          --事件类型
 30 
 31     EventDDL nvarchar(max) null,                          --事件内容
 32 
 33     EventXML xml null,                                    --事件xml
 34 
 35     databaseName nvarchar(255) null,                      --数据库名称
 36 
 37     SchemaName nvarchar(255) null,                        --架构名
 38 
 39     ObjectName nvarchar(255) null,                        --用户
 40 
 41     HostName varchar(64) null,                            --计算机名称
 42 
 43     IPAddress varchar(32) null,                           --IP地址
 44 
 45     ProgramName nvarchar(255) null,                       --SQLServer版本
 46 
 47     LoginName nvarchar(255) null                          --登录名
 48 
 49 )
 50 
 51 go
 52 
 53 --第二步:在需要监控的库上执行这个脚本,对DDL操作会记录在第一步中的库中
 54 
 55 if  exists(select * from sys.triggers where parent_class_desc= 'database' AND name = N'DDLtriggertTrace')
 56 
 57 disable trigger DDLtriggertTrace on database
 58 
 59 if  exists(select * from sys.triggers where parent_class_desc= 'database' AND name = N'DDLtriggertTrace')
 60 
 61 drop trigger DDLtriggertTrace on database
 62 
 63 go
 64 
 65 create trigger DDLtriggertTrace on database
 66 
 67     --捕获函数、存储过程、视图、表的创建、修改、删除动作
 68 
 69 for create_function,alter_function, create_procedure, alter_procedure, drop_procedure, create_view,
 70 
 71         alter_view, drop_view, create_table, alter_table, drop_table
 72 
 73 as
 74 
 75     begin
 76 
 77         set nocount on ;
 78 
 79         declare @EventData xml = eventdata() ;--返回有关服务器或数据库事件的信息,以xml格式保存。
 80      --rollback; --如果是执行删除动作 直接自动回滚,取消删除
 81         declare @ip varchar(32) =( select  client_net_address
 82 
 83                                     from    sys.dm_exec_connections
 84 
 85                                     where   session_id = @@SPID
 86 
 87                                   ) ;
 88 
 89  
 90 
 91         insert  AuditDB.dbo.DDLEvents
 92 
 93                 ( EventType ,
 94 
 95                   EventDDL,
 96 
 97                   EventXML,
 98 
 99                   databaseName,
100 
101                   SchemaName,
102 
103                   ObjectName,
104 
105                   HostName,
106 
107                   IPAddress,
108 
109                   ProgramName,
110 
111                   LoginName
112 
113                 )
114 
115                 select  @EventData.value('(/EVENT_INSTANCE/EventType)[1]','NVARCHAR(100)') ,
116 
117                         @EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]','NVARCHAR(MAX)') ,
118 
119                         @EventData ,
120 
121                         DB_NAME() ,
122 
123                         @EventData.value('(/EVENT_INSTANCE/SchemaName)[1]','NVARCHAR(255)') ,
124 
125                         @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]','NVARCHAR(255)') ,
126 
127                         HOST_NAME() ,
128 
129                         @ip ,
130 
131                         PROGRAM_NAME() ,
132 
133                         SuseR_SNAME() ;  
134 
135     end
136 
137 go

 最后在写个代码对比工具,SQL存储过程编写就可以实现SVN的功能

对比功能参考:https://www.cnblogs.com/weifeng123/p/9900023.html

原文地址:https://www.cnblogs.com/weifeng123/p/9894659.html