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

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

 --第一步:建库建表

 if  exists(select 1 from master.dbo.sysdatabases where name='AuditDB')

 drop database AuditDB

 go

 create database AuditDB

 go

 use AuditDB

 go

 if object_id('DDLEvents','u')is not null

 drop table DDLEvents

 go

 create table DDLEvents(

     EventDate datetime default (getdate()) NOT null,      --事件时间

     EventType nvarchar(64) null,                          --事件类型

     EventDDL nvarchar(max) null,                          --事件内容

     EventXML xml null,                                    --事件xml

     databaseName nvarchar(255) null,                      --数据库名称

     SchemaName nvarchar(255) null,                        --架构名

     ObjectName nvarchar(255) null,                        --用户

     HostName varchar(64) null,                            --计算机名称

     IPAddress varchar(32) null,                           --IP地址

     ProgramName nvarchar(255) null,                       --SQLServer版本

     LoginName nvarchar(255) null                          --登录名

 )

 go

 --第二步:在需要监控的库上执行这个脚本,对DDL操作会记录在第一步中的库中

 if  exists(select * from sys.triggers where parent_class_desc= 'database' AND name = N'DDLtriggertTrace')

 disable trigger DDLtriggertTrace on database

 if  exists(select * from sys.triggers where parent_class_desc= 'database' AND name = N'DDLtriggertTrace')

 drop trigger DDLtriggertTrace on database

 go

 create trigger DDLtriggertTrace on database

     --捕获函数、存储过程、视图、表的创建、修改、删除动作

 for create_function,alter_function, create_procedure, alter_procedure, drop_procedure, create_view,

         alter_view, drop_view, create_table, alter_table, drop_table

 as

     begin

         set nocount on ;

         declare @EventData xml = eventdata() ;--返回有关服务器或数据库事件的信息,以xml格式保存。
     --rollback; --如果是执行删除动作 直接自动回滚,取消删除
declare @ip varchar(32) =( select client_net_address from sys.dm_exec_connections where session_id = @@SPID ) ; insert AuditDB.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() ; end go

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

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

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

  1. 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据

    使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...

  2. sql的存储过程实例--循环动态创建表

    创建一个存储过程,动态添加100张track表表名track_0 ~~ track_99注:sql的拼接只能用 CONCAT()函数 -- 创建一个存储过程 CREATE PROCEDURE crea ...

  3. Oracle数据库—— 存储过程与函数的创建

    一.涉及内容 1.掌握存储过程与函数的概念. 2.能够熟练创建和调用存储过程与函数. 二.具体操作 1.创建存储过程,根据职工编号删除scott.emp表中的相关记录. (1)以scott 用户连接数 ...

  4. Sql Server存储过程和函数浅谈

    今天给大家总结一下sql server中的存储过程和函数.本人是小白,里面内容比较初级,大神不喜勿喷 自行飘过就是.. 首先给大家简单列出sql server中的流控制语句,后面会用到的^_^ sql ...

  5. 面试问题 - SQL 中存储过程与函数的区别

    SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行.  但函数也有着更多的限制,比如不能使用临 ...

  6. SQL中存储过程和函数的区别

    转:https://www.cnblogs.com/jacketlin/p/7874009.html 本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个. 而函数是可以嵌入在s ...

  7. sql server 笔记(数据类型/新建、修改、删除数据表/)

    1.数据类型: Character 字符串 / Unicode 字符串 / Binary 类型 / Number 类型  /  Date 类型  / 其他数据类型 详解:http://www.w3sc ...

  8. db2 中 SQL判断物理表是否存在、修改表名

    1.db2 中 SQL判断物理表是否存在 SELECT * FROM SYSIBM.SYSTABLES WHERE TID <> 0 AND Name = 'TABLE_NAME' AND ...

  9. MySQL使用SQL操作数据表的增加、修改和删除

    表的修改和删除 修改 -- 修改表名称 -- ALTER TABLE 旧表名 RENAME AS 新表名 ALTER TABLE test RENAME AS test1 -- 增加表字段 -- AL ...

随机推荐

  1. RecyclerView的刷新和加载更多

    1.RecyclerView :出现也不知道多久了,没怎么使用过,上次写的笔记乱七八糟的,再次仔细的整理下.   使用需加入依赖  compile 'com.android.support:recyc ...

  2. 在centos上安装php5.5+MySQL 5.5.32

    在centos直接使用yum install 安装php的话版本比较低,如果需要高版本的话,请看如下: Step 1: Installing Remi Repository ## Install Re ...

  3. JavaScript中必记英语单词及含义

    reflow[ri'flo]:回流,重构(通过css改变页面的结构,比如一行元素,其中一个元素的高改变了,那么其他元素的位置也都会改变) repaint['ripent]:重绘(只改变页面的样式,比如 ...

  4. Android 7.0 Gallery图库源码分析2 - 分析启动流程

    前面一讲解了Gallery启动Activity以及界面如何绘制,现在开始讲解启动流程的代码逻辑. GalleryActivity的onCreate方法中调用initializeByIntent()方法 ...

  5. Qt Designer设计 UI 文件并调用

    本文介绍的是Qt Designer设计 UI 文件并调用,在坛子里逛了一圈,关于UI方面的好像不怎多,本篇给大家分享一下. AD: 2013云计算架构师峰会超低价抢票中 Qt Designer设计 U ...

  6. 【codeforces 452D】Washer, Dryer, Folder

    [题目链接]:http://codeforces.com/problemset/problem/452/D [题意] 洗衣服有3个步骤,洗,干,叠; 有对应的3种洗衣机,分别有n1,n2,n3台,然后 ...

  7. NYIST 1107 最高的奖励

    最高的奖励 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 请问:挖掘机技术哪家强?AC了告诉你! 给你N(N<=3*10^4)个任务,每个任务有一个截止完成时 ...

  8. [React] Unit test a React Render Prop component

    In this lesson, I use Enzyme and Jest to unit test a Counter Render Prop component. Writing integrat ...

  9. 【Linux】进程调度概述

    1 可运行队列 (基于实时进程调度) 调度程序中最主要的数据结构式运行队列(runqueue).可运行队列是给定处理器上的可运行进程的链表,每一个处理器一个. 每一个可投入运行的进程都唯一的归属于一个 ...

  10. libLAS1.8.0 编译和配置(VS2013+Win7 64)(一)

    libLAS 是一个用来读写三维激光雷达数据(LiDAR) 的 C++ 库.在学习.科研和研发中都会广泛运用.怎样编译和配置自己所须要版本号的libLAS库确是一件麻烦耗时的事情. 笔者在Win7 6 ...