SQL 自動記錄存儲過程,表,函數的建立修改和刪除 -至關於SVN同樣

     在項目開發過程當中,項目管理者一般都很但願對項目的開發進展有一個日誌的記錄。代碼的記錄和管理能夠經過TFS或者VSS等工具去管理。可是數據庫卻沒有記錄開發日誌這一功能。這在實際開發中很不方便,特別是大量的存儲過程改動。html

 那麼針對這一個需求,在數據庫中創建一個數據庫的觸發器,記錄存儲過程的代碼修改!數據庫

  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的功能服務器

對比功能參考:http://www.javashuo.com/article/p-bludehgx-hn.htmlsession

相關文章
相關標籤/搜索