利用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代码。

 

既然我们对OBJECT_DEFINITION函数的工作原理有了很好的了解,接下来让我们看看如何利用这个函数来存档我们数据库中的过程代码。首先,运行下面的脚本程序在测试数据库中创建20个存储过程。

 

DECLARE @i INT
SET @i = 1

WHILE @i <= 20
BEGIN      EXECUTE      
(      "IF OBJECT_ID(""usp_TestProcedure"+@i + """)>0            
DROP PROCEDURE usp_TestProcedure"+@i+"      "      )      
EXECUTE      (      "      
CREATE PROCEDURE usp_TestProcedure" + @i + "      
AS      
BEGIN                       
PRINT ""The name of this procedure is "" 
+ CAST(OBJECT_NAME(@@PROCID) 
AS VARCHAR(20))       END"      )      
SET @i = @i + 1
END

你将看到在上面的脚本中,我们使用了动态SQL语句。当创建动态SQL语句时,我习惯用系统存储过程sp_executeSQL,因为该过程能够很好地在系统中缓存SQL语句。但是,在我们这一例子中,EXECUTE命令就能很好地完成任务。

 

现在我们的数据库中已经有了一些对象,我们可以创建用来存档数据库中存储过程需要的对象和代码。下面的脚本可以为我们完成这项工作。

 

IF OBJECT_ID("CodeArchive","U")>0      
DROP TABLE CodeArchive

CREATE TABLE CodeArchive
(      ArchiveID INT IDENTITY(1,1) PRIMARY KEY,      
ObjectName SYSNAME,      
ObjectDescription VARCHAR(60),      
ObjectType CHAR(2),      
ObjectDefinition VARCHAR(MAX),      
ObjectID INT,      
CreationDate DATETIME,      
ModifiedDate DATETIME,      
EntryDate DATETIME DEFAULT(GETDATE())
)

INSERT INTO CodeArchive
(      ObjectName, ObjectDescription, 
ObjectType, ObjectDefinition,     
 ObjectID, CreationDate, ModifiedDate
)
SELECT       so.name, so.type_desc, so.type, 
OBJECT_DEFINITION(object_id),       
so.object_id, so.create_date, so.modify_date    
FROM      sys.objects so
WHERE      
so.[type] IN("C", "D", "P", "FN", "R", "RF", "TR", "IF", "TF", "V")

转载于:https://www.cnblogs.com/safezone/articles/1523789.html

17、深入了解 Microsoft Lync Server 2010 存档与 Director 角色 本文深入探讨了 Microsoft Lync Server 2010 的两大核心功能:存档功能和 Director 角色。在存档部分,涵盖了配置优化、数据导出、常见故障排查方法、最佳实践以及总结要点;在 Director 角色部分,详细介绍了其定义、部署优势、安装步骤、配置管理、最佳实践以及未来展望。文章旨在帮助系统管理员更好地理解和应用 Lync Server 2010,以提升企业通信系统的安全性、稳定性和合规性。 阅读详情

相关推荐

delphi Image 写入,读取 sql server 数据库(源码)

image 写入,读取 数据库 源码 通过adoquery 进行图片的保存与读取,sql server数据库.

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

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 456

Uncertainty-Aware Mean Teacher(UA-MT)

本文提出了一种新的基于不确定性的半监督学习框架(UA-MT),通过额外利用未标记的数据从3D MR图像中分割左心房。具体地说,本文建立了一个教师模型和一个学生模型,学生模型通过最小化标注数据上的分割监督损失和所有输入数据上的与教师模型预测输出的一致性损失进行优化。如果没有未标记输入中的注释,教师模型的预测目标可能不可靠且有噪声。:在估计不确定性 U 的指导下,我们过滤掉相对不可靠**(高不确定性),整个体积** U 的不确定性**是 {u} ∈ RH×W ×D。过滤掉高不确定性的,也就是熵大于某个值的。

Alexa_的博客 1869

SQL Server保存修改

SQL Server错误提示:不允许保存更改。 您所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。 修改数据库的数据结构,比如把varchar改为nvarchar,sqlserver出现如下错误提示: 1、单击SQL Server的“工具”→“选项”,如下图: 2、选择“Designers”,勾掉右侧“阻止保存要求重新创建表的更改(S)”。 ...

zq9955的博客 1947

单片机多级菜单的简单实现

单片机多级菜单的简单实现 多级菜单的思路 最近想把stm32上的oled显示屏做的好看一些,于是动手写了写一个多级菜单,思路很简单,每个页面用单独的函数封装好,每个功能也是用单独的函数进行封装,用了3个按键,两个切换键,一个确定键。 首先来看看用啥判断页面的(这偷个懒,希望没人打我) //页面标志位 uint8_t s1 = 0; //主页面功能号 uint8_t s2 = 0; //主次页面判断标志位 uint16_t s3 = 1; //次页面功能号 主页面的显示函数,这是个很枯燥的一

qq_43940175的博客 7605

【学一点英飞凌】AutoSar-MCAL-Gtm-TOM模块

本文基于英飞凌TC3X7芯片手册,GTM的TOM模块是产生并输出PWM的地方,想要彻底了解PWM,就必须知道它是怎么产生和如何被输出的。TOM通道还没有介绍的,详见下一篇;

qq_44688936的博客 6030

sql server存储过程详细代码

use jxgl  --首先判断有没有已经建立up_getallstudents存储过程,有则先删除  if exists   (select name from sysobjects where name = 'up_getallstudents' and type = 'p' )   drop procedure up_getallstudents     --编写存储过程up_get

houbin0912的博客 1282

Spring Boot应用Docker化实战:从Dockerfile编写到镜像推送完整流程

本文详细介绍了将Spring Boot应用Docker化的完整实战流程。从环境准备、项目审视,到编写高效且安全的Dockerfile,重点讲解了多阶段构建、镜像层优化、Spring Boot分层JAR等核心技巧,并涵盖了镜像构建、验证、调试以及最终推送至仓库并集成CI/CD的最佳实践,帮助开发者构建生产级Docker镜像。

butter的博客 1023

SQL SERVER分区表

简介     分区表是在SQL SERVER2005之后的版本引入的特性。这个特性允许把逻辑上的一个表在物理上分为很多部分。而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个表做union操作.     分区表在逻辑上是一个表,而物理上是多个表.这意味着从用户的角度来看,分区表和普通表是一样的。这个概念可以简单如下图所示:          而对于S...

weixin_34234829的博客 191

解题报告-美团点评2017秋招笔试编程题--常见动态规划问题

晚上就要美团笔试了,在牛客上刷套美团的题练练手,四道题目全都是典型题目,经典的连题面都懒得改那种,也都不难,很基础的动态规划问题。[编程题] 大富翁游戏时间限制:1秒空间限制:32768K大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n&lt;=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。 输...

聂小白的专栏 1719

在 VS Code 里配置 SAP Joule for Developers 的 ABAP AI side-by-side 能力

摘要: 随着ABAP开发工具链的演进,VS Code逐渐融入ABAP开发流程,SAP Joule for Developers的ABAP AI能力通过side-by-side模式(基于BTP中央服务)为多系统开发提供统一AI支持。该模式避免了各ABAP后端独立升级AI能力的碎片化问题,由管理员配置BTP订阅URL后,开发者可在ADT或VS Code中全局调用。实际落地需注意角色分工(管理员配置服务,开发者填写URL)、AI units资源规划及配置细节(如区分全局与项目级设置)。建议将Joule URL纳入

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 120

SQL Server 日志分析

 4.6  通过日志查看服务器的运行情况SQLServer 2005可以将某些系统事件和用户自定义的事件记录到SQL Server错误日志和Windows应用程序日志中。这两种日志都会自动标上时间。4.6.1  在【事件查看器】中查看服务器的运行情况SQLServer2005服务器的启动、关闭和暂停动作,都会产生一个事件记录,这个记录将会记在Windows的【事

猪猪乐园 1万+

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能

perseverance51博客 4235

【PG高可用】一 PostgreSQL高可用方案repmgr部署(非常详细)

repmgr安装部署

DBA之路的博客 7054

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SQL server 如何创建分区表

一、分区表的定义:         一般情况下,我们建立数据库表时,表数据都存放在一个文件里。但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下由多个cpu进行处理。这样文件的大小随着拆分而减小,还得到硬件系统的加强,自然对我们操作数据是大大有利的。所以大数据量的数据表,对分区的需要还是必要的,因为它可以提高...

蓝星部队的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SQL Server 2008 卸载报错

解决问题: 1. SQL完全删除; 2. 卸载sql2008为提示“重新启动计算机失败”; 3. 错误代码 0x84B40000;

我壮着胆子再问一遍冬雪枫花 2463

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Microsoft SQL Server之数据库存档

<br />本文将为大家讲述如何注释自己的SQL Server,这些原理适用于所有的SQL Server版本,虽然SQL Server 2005及更高的版本包含了一些增强数据存档功能的巧妙设置。本文大部分涉及的原理也同样适用于其他的关系数据库,如Oracle、 MySQL、Microsoft Access和PostgreSQL等。 <br />  数据库命名规范 <br />  如果你是从头开始设计一个数据库,那遵循逻辑数据实体命名规范将是明智之举。下面为您提供在新数据库中给对象命名时会用到的一些建议。 <

huishouwang的专栏 459

T-SQL查询进阶--理解SQL SERVER中的分区表

简介 分区表是在SQL SERVER2005之后的版本引入的特性。这个特性允许把逻辑上的一个表在物理上分为很多部分。而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个表做union操作. 分区表在逻辑上是一个表,而物理上是多个表.这意味着从用户的角度来看,分区表和普通表是一样的。这个概念可以简单如下图所示: 而对于S...

weixin_30419799的博客 89

SQL Server 错误日志过滤(ERRORLOG)

2013-06-24 15:54 by 听风吹雨 一、背景 有一天我发现SQL Server服务器的错误日志中包括非常多关于sa用户的登陆错误信息:“Login failed for user 'sa'. 原因: 评估密码时出错。[客户端: XX.XX.XX.XX]”。可是我很久之前就已经禁用了sa用户,怎么还会有那么多的sa用户登陆信息呢?我猜想是有人在暴力破解我们数据库的sa用户的

u012752975的专栏 4011

SQL Server 分区表

分区表简介   分区表是SQL Server2005新引入的概念,这个特性在逻辑上将一个表在物理上分为多个部分。(即它允许将一个表存储在不同的物理磁盘里)。在SQL Server2005之前,分区表实际上是分布式视图,也就是多个表做union操作。   分区表在逻辑上是一个表,而物理上是多个表。在用户的角度,分区表和普通表是一样的,用户角度感觉不出来。          而在SQL Ser

Kong的博客 470

清除SQL SERVER错误日志出现操作系统错误的解决方法

SQL Server 外部的进程可能会阻止 SQL Server 读取这些文件。因此,错误日志条目可能已丢失,并且或许不可能查看某些 SQL Server 错误日志。请确保任何其他进程都未将该文件锁定为只写访问 之前在UAT环境搭建的SQL SERVER 2008 R2数据库一直用得比较正常,但最近发现在Sharepoint中不能进行任何操作了,开始以为是什么配置出了问题(因为一直在研究一些

vip_linux的专栏 1341

理解SQL SERVER中的分区表

简介     分区表是在SQL SERVER2005之后的版本引入的特性。这个特性允许把逻辑上的一个表在物理上分为很多部分。而对于SQL SERVER2005之前版本,所谓的分区表仅仅是分布式视图,也就是多个表做union操作.     分区表在逻辑上是一个表,而物理上是多个表.这意味着从用户的角度来看,分区表和普通表是一样的。这个概念可以简单如下图所示:

lenovore的专栏 556
上一篇: 辞职的十大原因
下一篇: Java vs. .NET程序员的困惑
aixie2148
博客等级 码龄10年 7粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值