SQL 自动记录存储过程,表,函数的创建修改和删除 -相当于SVN一样
在项目开发过程中,项目管理者通常都很希望对项目的开发进展有一个日志的记录。代码的记录和管理可以通过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一样的更多相关文章
- 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据
使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...
- sql的存储过程实例--循环动态创建表
创建一个存储过程,动态添加100张track表表名track_0 ~~ track_99注:sql的拼接只能用 CONCAT()函数 -- 创建一个存储过程 CREATE PROCEDURE crea ...
- Oracle数据库—— 存储过程与函数的创建
一.涉及内容 1.掌握存储过程与函数的概念. 2.能够熟练创建和调用存储过程与函数. 二.具体操作 1.创建存储过程,根据职工编号删除scott.emp表中的相关记录. (1)以scott 用户连接数 ...
- Sql Server存储过程和函数浅谈
今天给大家总结一下sql server中的存储过程和函数.本人是小白,里面内容比较初级,大神不喜勿喷 自行飘过就是.. 首先给大家简单列出sql server中的流控制语句,后面会用到的^_^ sql ...
- 面试问题 - SQL 中存储过程与函数的区别
SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行. 但函数也有着更多的限制,比如不能使用临 ...
- SQL中存储过程和函数的区别
转:https://www.cnblogs.com/jacketlin/p/7874009.html 本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个. 而函数是可以嵌入在s ...
- sql server 笔记(数据类型/新建、修改、删除数据表/)
1.数据类型: Character 字符串 / Unicode 字符串 / Binary 类型 / Number 类型 / Date 类型 / 其他数据类型 详解:http://www.w3sc ...
- db2 中 SQL判断物理表是否存在、修改表名
1.db2 中 SQL判断物理表是否存在 SELECT * FROM SYSIBM.SYSTABLES WHERE TID <> 0 AND Name = 'TABLE_NAME' AND ...
- MySQL使用SQL操作数据表的增加、修改和删除
表的修改和删除 修改 -- 修改表名称 -- ALTER TABLE 旧表名 RENAME AS 新表名 ALTER TABLE test RENAME AS test1 -- 增加表字段 -- AL ...
随机推荐
- SQL的几个路径
这个是主数据库文件存放的地方 C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER2014\MSSQL\DATA
- 让html页面不缓存js的实现方法
很多朋友都会碰到这样的情况:如果我们页面加载了js的话下次打开时也会是调用这个js缓存文件,但对于我们调试时是非常的不方便了,本文就来谈论如何解决这一问题,下面一起来看看. 不缓存JS的方法其实挺简单 ...
- spring MVC +freemarker + easyui 实现sql查询和执行小工具总结
项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍 ...
- mysql定时清理binlog
一.没有主从同步的情况下清理日志 mysql -uroot -p123456 -e 'PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY) ...
- BZOJ 4229: 选择 LCT_独创方法_边双
考虑如果两点在一个环中,那么这两点一定可以构出双联通分量. 考虑环和环镶嵌,那么两个环中的点一定都互为双联通分量. 由此,我们想到一个算法: 将删边转为反向加边,用LCT维护图. 当我们连接两个点时, ...
- HDU 2256 Problem of Precision( 矩阵快速幂 )
链接:传送门 题意:求式子的值,并向下取整 思路: 然后使用矩阵快速幂进行求解 balabala:这道题主要是怎么将目标公式进行化简,化简到一个可以使用现有知识进行解决的一个过程!菜的扣脚...... ...
- [读书笔记] Python 数据分析 (十一)经济和金融数据应用
resample: 重采样函数,可以按照时间来提高或者降低采样频率,fill_method可以使用不同的填充方式. pandas.data_range 的freq参数枚举: Alias Descrip ...
- 《你又怎么了我错了行了吧》【Beta】Scrum Meeting 2
第二天 日期:2019/6/25 前言: 第2次会议在女生宿舍召开 确认编码阶段已经完成,继续测试项目 1.1 今日完成任务情况以及明日任务安排 姓名 当前阶段任务 下一阶段任务 刘 佳 完善了未开发 ...
- jvm 虚拟机的组成部分
1.类加载子系统 :负责从文件系统或者网络中加载 Class 信息,加载的信息存放在 一块称之为方法区的内存空间 2.方法区:存放类信息,常量信息,常量池信息,包括字符串字面量和数字常量等 3.Jav ...
- [terry笔记]python购物程序
如下是一个购物程序: 先输入工资,显示商品列表,购买,quit退出,最后格式化输出所买的商品. count = 0 while True: #做一个循环判断,如果输入的不是数字,基于提示,三次后退出 ...