利用SQL Server系统函数进行代码存档

作为一名数据库管理员,在进行代码迁移之前,我总是尽力给提交于开发环境的代码一个完整的面貌。但是,不得不承认,我不能保证不发生任何可能破坏开发系统的事情。当这种情况发生时,可能的补救措施是恢复到目标代码的前一版本,目标代码可能是存储过程,函数等等。如果可能的话,你不想做但又不得不做的事情是从备份的数据库中恢复代码,但是如果备份的数据库存储在磁带上,这种方法可能因花费太长的时间而不能使用。如果数据库庞大的话,要花费相当长的时间来恢复,更不用说你还要找一台足够大的服务器来存储备份的文件。不过,还有更好的方法。

很久前我找到的一种解决方法是备份数据库代码到一个独立的数据表中,这样如果在我们开发的代码发生错误时,就可以从数据表恢复出错的过程或函数。这种方法确实节省了大量的时间。

在SQL Server 2000中,这种方法可以这样实现:对特别的数据库做一个完整的syscomments数据表备份,然后将备份的数据表放入档案表中。我通常保存最近两周的重要过程代码。利用这种技术唯一的麻烦是:如果代码对象十分大,那么可能要对代码进行重构。因为如果代码过大将会被存储到syscomments表中不同的行中,有时这可能是件令人感到头痛的事。

SQL Server 2005 新增加的众多功能之一是可以利用一个系统函数返回某个对象的完整代码,这个系统函数将使得存档你的过程代码变得十分简单。

SQL Server 2005新增的系统函数OBJECT_DEFINITION根据提供给该函数的对象ID返回对象的TSQL代码。为了更好的理解这个函数的工作过程,让我举个例子。首先我们创建一个用户自定义函数,该函数的脚本如下:

CREATE FUNCTION udf_Multiply
(@Val1 INT,
@Val2 INT
)
RETURNS INT
AS
BEGIN
DECLARE @RetVal INT
SET @RetVal = (@Val1 * @Val2)
RETURN(@RetVal)
END

这是一个很简单的小函数。因为它仅仅处理两个参数,但是已足够为我们演示OBJECT_DEFINITION函数是如何工作。测试该系统函数的脚本如下:

DECLARE @ObjectID INT
SET @ObjectID = OBJECT_ID('udf_Multiply')
SELECT OBJECT_DEFINITION(@ObjectID)

在这个例子中,我们实际上用了两个系统函数。首先,我们要得到前面创建的udf_Multiply函数的OBJECT_ID,在SQL Server 数据库引擎中,OBJECT_ID是一个对象的系统标识符。然后我们将这个ID传给系统函数OBJECT_DEFINITION,这一系统函数将返回提供给它的ID对象的代码,即返回值是我们以前为udf_Multiply 函数写的TSQL代码。

时间: 2024-11-02 22:28:34

利用SQL Server系统函数进行代码存档的相关文章

sql server count函数问题

问题描述 sql server count函数问题 代码: select jl.ORGAN_NAME as '油站名称',jl.KPLX as '开票类型',jl.SFCH as '冲红数量',sum(jl.KPJE) as '开票金额' from DZFP_KPJL jl where jl.ORGAN_NAME = '组织机构2' and jl.KPRQ between '2016-03-22' and '2016-03-24' group by jl.ORGAN_NAME,jl.KPLX 查

深入学习SQL Server聚合函数算法优化技巧_MsSql

Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. 一.写在前面 如果有对Sql server聚合函数不熟或者忘记了的可以看我之前的一片博客. 本文中所有数据演示都是用

深入学习SQL Server聚合函数算法优化技巧

Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用. 一.写在前面 如果有对Sql server聚合函数不熟或者忘记了的可以看我之前的一片博客. 本文中所有数据演示都是用

[收藏]利用SQL Server Reporting Services 从应用程序生成用户友好的报表

server|services|程序 利用 SQL Server Reporting Services 从应用程序生成用户友好的报表 发布日期: 09/03/2004 | 更新日期: 09/03/2004John C. Hancock   http://www.microsoft.com/china/msdn/library/data/sqlserver/SQLServerReportServ.mspx本文讨论:•Reporting•设计和部署报表•使用 Reporting Services 的

分析MS SQL Server里函数的两种用法

server|函数 SQL Server里函数的两种用法(可以代替游标) 1. 因为update里不能用存储过程,然而要根据更新表的某些字段还要进行计算.我们常常采用游标的方法,这里用函数的方法实现. 函数部分: 以下是引用片段: CREATE FUNCTION [DBO].[FUN_GETTIME] (@TASKPHASEID INT) RETURNS FLOAT AS BEGIN DECLARE @TASKID INT, @HOUR FLOAT, @PERCENT FLOAT, @RETUR

SQL Server里函数的两种用法(可以代替游标)

server|函数|游标 SQL Server里函数的两种用法(可以代替游标)1. 因为update里不能用存储过程,然而要根据更新表的某些字段还要进行计算.我们常常采用游标的方法,这里用函数的方法实现. 函数部分:CREATE FUNCTION [DBO].[FUN_GETTIME] (@TASKPHASEID INT) RETURNS FLOAT AS BEGIN   DECLARE @TASKID INT,          @HOUR FLOAT,           @PERCENT

SQL SERVER其它函数

本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER常用的其它函数. (其它数据库这里就不罗列了,想看更多的可以关注<程序员的SQL金典>). 具体的其他函数包括:类型转换的函数.空值处理的函数.流程控制函数.SQL SERVER独有函数. 类型转换的函数 CAST ( expression AS data_type)函数         CONVERT ( data_type, expression)函数 上面两个函数都是SQL SERVER提供的

SQL Server系统表sysobjects介绍与使用

原文:SQL Server系统表sysobjects介绍与使用 关于SQL Server数据库的一切信息都保存在它的系统表格里.我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格.但是,你可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器.你可以一个一个地检查表格,但是如果你有500个表格的话,这可能会消耗相当大的人工. 这就让sysobjects表格有了用武之地.虽然我不建议你更新这个表格,但是你当然有权对其进行审查. sysobjects 表 在数据库内创建的每个对象(约

SQL Server 聚合函数算法优化技巧

原文:SQL Server 聚合函数算法优化技巧 Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值执行计算并返回单一的值.聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值. 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用.   v1.写在前面 如果有对Sql server聚合函数不熟或者忘