sql存储过程等-版本控制

数据库开发人员总在想,每次修改了函数/存储过程,我们都得自己做备份,用以历史参考,当发现错误的时候,可以回滚

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create trigger [tr_MStran_alterschemaonly] on database for ALTER_FUNCTION, ALTER_PROCEDURE as
                            set ANSI_NULLS ON
                            set ANSI_PADDING ON
                            set ANSI_WARNINGS ON
                            set ARITHABORT ON
                            set CONCAT_NULL_YIELDS_NULL ON
                            set NUMERIC_ROUNDABORT OFF
                            set QUOTED_IDENTIFIER ON
                            declare @EventData xml
                            set @EventData=EventData()
                            exec sys.sp_MStran_ddlrepl @EventData, 3
GO
DISABLE TRIGGER [tr_MStran_alterschemaonly] ON DATABASE
GO
/****** Object:  DdlTrigger [tr_MStran_altertable]    Script Date: 2015/12/16 16:23:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create trigger [tr_MStran_altertable] on database for ALTER_TABLE as
                            set ANSI_NULLS ON
                            set ANSI_PADDING ON
                            set ANSI_WARNINGS ON
                            set ARITHABORT ON
                            set CONCAT_NULL_YIELDS_NULL ON
                            set NUMERIC_ROUNDABORT OFF
                            set QUOTED_IDENTIFIER ON
                            declare @EventData xml
                            set @EventData=EventData()
                            exec sys.sp_MStran_ddlrepl @EventData, 1
GO
DISABLE TRIGGER [tr_MStran_altertable] ON DATABASE
GO
/****** Object:  DdlTrigger [tr_MStran_altertrigger]    Script Date: 2015/12/16 16:23:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create trigger [tr_MStran_altertrigger] on database for ALTER_TRIGGER as
                            set ANSI_NULLS ON
                            set ANSI_PADDING ON
                            set ANSI_WARNINGS ON
                            set ARITHABORT ON
                            set CONCAT_NULL_YIELDS_NULL ON
                            set NUMERIC_ROUNDABORT OFF
                            set QUOTED_IDENTIFIER ON
                            declare @EventData xml
                            set @EventData=EventData()
                            exec sys.sp_MStran_ddlrepl @EventData, 4
GO
DISABLE TRIGGER [tr_MStran_altertrigger] ON DATABASE
GO
/****** Object:  DdlTrigger [tr_MStran_alterview]    Script Date: 2015/12/16 16:23:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create trigger [tr_MStran_alterview] on database for ALTER_VIEW as
                            set ANSI_NULLS ON
                            set ANSI_PADDING ON
                            set ANSI_WARNINGS ON
                            set ARITHABORT ON
                            set CONCAT_NULL_YIELDS_NULL ON
                            set NUMERIC_ROUNDABORT OFF
                            set QUOTED_IDENTIFIER ON
                            declare @EventData xml
                            set @EventData=EventData()
                            exec sys.sp_MStran_ddlrepl @EventData, 2
GO
DISABLE TRIGGER [tr_MStran_alterview] ON DATABASE
GO
/****** Object:  DdlTrigger [TRG_VERSION_CONTROL_TABLE]    Script Date: 2015/12/16 16:23:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [TRG_VERSION_CONTROL_TABLE]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
SET NOCOUNT ON
SET ANSI_PADDING ON
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘[dbo].[VERSION_CONTROL_TABLE]‘) AND type in (N‘U‘))
BEGIN
CREATE TABLE [dbo].[VERSION_CONTROL_TABLE](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [databasename] [varchar](256) NULL,
    [eventtype] [varchar](50) NULL,
    [objectname] [varchar](256) NULL,
    [objecttype] [varchar](25) NULL,
    [sqlcommand] [nvarchar](max) NULL,
    [loginname] [varchar](256) NULL,
    [hostname] [varchar](256) NULL,
    [PostTime] [datetime] NULL,
    [Version] [int] NOT NULL,
 CONSTRAINT [PK_VERSION_CONTROL_TABLE] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY =OFF) ON [PRIMARY]
) ON [PRIMARY]
END
DECLARE @CurrentVersion int
DECLARE @CurrentID int
DECLARE @DatabaseName varchar(256)
DECLARE @ObjectName varchar(256)
DECLARE @data XML
SET @data =EVENTDATA()
INSERT INTO dbo.VERSION_CONTROL_TABLE(databasename, eventtype,objectname, objecttype, sqlcommand, loginname,Hostname,PostTime, Version)
VALUES(
@data.value(‘(/EVENT_INSTANCE/DatabaseName)[1]‘, ‘varchar(256)‘),
@data.value(‘(/EVENT_INSTANCE/EventType)[1]‘, ‘varchar(50)‘),  -- value is case-sensitive
@data.value(‘(/EVENT_INSTANCE/ObjectName)[1]‘, ‘varchar(256)‘),
@data.value(‘(/EVENT_INSTANCE/ObjectType)[1]‘, ‘varchar(25)‘),
@data.value(‘(/EVENT_INSTANCE/TSQLCommand)[1]‘, ‘nvarchar(max)‘),
@data.value(‘(/EVENT_INSTANCE/LoginName)[1]‘, ‘varchar(256)‘),
HOST_NAME(),
GETDATE(),
0
)
SET @CurrentID = IDENT_CURRENT(‘VERSION_CONTROL_TABLE‘)
SELECT @DatabaseName = databasename, @ObjectName = objectname FROM VERSION_CONTROL_TABLE WHERE ID = @CurrentID
IF (@DatabaseName IS NOT NULL AND @ObjectName IS NOT NULL)
BEGIN
    SELECT @CurrentVersion = MAX(Version) FROM VERSION_CONTROL_TABLE WHERE databasename = @DatabaseName AND objectname = @ObjectName
    UPDATE VERSION_CONTROL_TABLE SET Version = ISNULL(@CurrentVersion, 0) + 1 WHERE ID = @CurrentID
END
SET ANSI_PADDING OFF
GO
DISABLE TRIGGER [TRG_VERSION_CONTROL_TABLE] ON DATABASE
GO
ENABLE TRIGGER [tr_MStran_alterschemaonly] ON DATABASE
GO
ENABLE TRIGGER [tr_MStran_altertable] ON DATABASE
GO
ENABLE TRIGGER [tr_MStran_altertrigger] ON DATABASE
GO
ENABLE TRIGGER [tr_MStran_alterview] ON DATABASE
GO
ENABLE TRIGGER [TRG_VERSION_CONTROL_TABLE] ON DATABASE
GO
时间: 2024-10-17 19:41:36

sql存储过程等-版本控制的相关文章

SQL存储过程和函数

SQL存储过程: 由来:在具体应用中,一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句.因此,mysql提供了数据库对象存储过程和函数. 定义:存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.和函数的区别在于,函数有返回值,存储过程没有. 优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度.2.当对数据库进行复杂操作时,

插入订单并且输出订单号的sql存储过程

--插入订单-- create proc InsertOrders ( @OrderNumber varchar(300), @OrderState varchar(30), @OrderType varchar(30), @OrderTime DateTime, @OrderFirm varchar(300), @OrderMoney decimal(8,2), @SendWayMoney decimal(8,2), @RegisterId int, @CoalitionOrdersId in

创建sql自定义的函数及商品分页sql存储过程

--商品筛选时判断品牌ID是否存在 --select dbo.isValite(94,94)create function isValite(@brandId int,@bId int)returns intas begin Declare @rNumber int if @brandId = @bId set @rNumber = 1 else set @rNumber = 0 if @bId = 0 set @rNumber = 1 return @rNumberendgo --判断商品筛选

sql存储过程和事务的应用

在去年,学习数据库的时候就学过存储过程了.一直都只知道一些理论,却不知道如何去使用.时隔一年,终于找到如何使用存储过程了. 在机房收费系统中,有些操作,需要多次执行sql语句,多次执行完成才算是完成这个事件流.但是如果其中有一个环节出了错误,那么没出错误的那些操作是不是就多余了. 执行存储过程,就是执行多句SQl语句.而事务,是为了控制这些语句 要么都做,要么 都不做. 在机房收费系统中,执行sql语句的时候. 一般的sql语句使用方法:定义一个字符串,用于存放sql语句.之后指明command

SQL 存储过程 分页

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author: *** -- Create date: 2014-03-27 20:00 -- Description: 采用最新的 row_number() over 技术高效分页方法 -- ============================================= ALTER PRO

SQL 存储过程入门(事务)(四)

SQL 存储过程入门(事务)(四) 本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果都顺利插入成功了,当然没有问题,如果任意一张表插入失败了,而另一张表插入成功了,插入成功的表就是垃圾数据了.我们要判断,任意一张表插入失败都回滚,就是都不插入,这就是事务的基本使用. 一,sql事务定义 所谓事务是用户定义的一个数据库操作序列,是一个不可分割的工作

SQL存储过程实例详解

SQL存储过程实例详解 本文用3个题目,从建立数据库到创建存储过程,详细讲解数据库的功能. 题目1 学校图书馆借书信息管理系统建立三个表: 学生信息表:student 字段名称 数据类型 说明 stuID char(10) 学生编号,主键 stuName Varchar(10) 学生名称 major Varchar(50) 专业 图书表:book 字段名称 数据类型 说明 stuID char(10) 学生编号,主键 stuName Varchar(10) 学生名称 major Varchar(

《软件测试自动化之道》读书笔记 之 SQL 存储过程测试

<软件测试自动化之道>读书笔记 之 SQL 存储过程测试 2014-09-28 待测程序测试程序   创建测试用例以及测试结果存储  执行T-SQL脚本  使用BCP工具导入测试用例数据  创建T-SQL 测试套件  当待测存储过程返回行集的时候,如何判断测试结果是否通过  当待测存储过程返回out参数时,如何判断测试结果是否通过  当待测存储过程没有返回值时,如何判断测试结果是否通过 许多基于Windows的系统都使用了SQL Server作为后台组件.待测程序经常通过存储过程来访问数据库.

在SQL存储过程中给条件变量加上单引号

在SQL存储过程中给条件变量加上单引号,不加语句就会出问题,以下就是在存储过程中将条件where设置成了动态变化的,给where赋完值再和前面的语句拼接,再execute(SQL) set @where= '(DATEDIFF(day,'''+CONVERT(varchar(100), @d_start, 23)+''',sdate)>=0 and DATEDIFF(day,'''+CONVERT(varchar(100), @d_end, 23)+''',sdate)<=0) and ' +