您当前的位置: AG亚游集团 > 数据库教程 > DB2教程 > 利用OBJECT_DEFINITION函数来代码存档

利用OBJECT_DEFINITION函数来代码存档

作者:guanchaofeng 来源:不详 发布时间: 2009-09-30 08:38 点击: 次
作为一名数据库管理员,在进行代码迁移之前,我总是尽力给提交于开发环境的代码一个完整的面貌。但是,不得不承认,我不能保证不发生任何可能破坏开发系统的事情。当这种情况发生时,可能的补救措施是恢复到目标代码的前一版本,目标代码可能是存储过程、函

AG亚游集团,传给雅昌,是国内最专业的在线影像输出平台,隶属于雅昌文化集团。“传给雅昌”以“提升影像艺术价值”和“让影像艺术之美走进每个人的生活”为使命,为专业摄影师及摄影爱好者提供数字个展、调图设计、定制输出、作品销售等线上服务,助力摄影师一步跨入大师圈。

通知要求,要深入开展社会主义核心价值观学习教育实践,把学习宣传习近平总书记系列重要讲话精神作为重中之重,深入农村宣传解读党的十八届六中全会精神,增强广大农民贯彻执行党的路线方针政策的自觉性、坚定性。要结合“深入生活、扎根人民”主题实践活动,持续开展“文化进万家”“送欢乐下基层”“心连心”、群星奖优秀作品巡演、文化艺术志愿服务、农村电影放映、全民阅读等活动,完善公共文化设施网络,开展法治宣传教育,活跃农民精神文化生活。广泛开展科技成果转化和推广、科技服务和科学普及活动,继续实施“三区人才支持科技人员专项计划”,深入推行科技特派员制度,开展科技列车行、科普大篷车万里行、流动科技馆进基层、科技之光青年专家服务团活动,提高农民科技意识、科技致富能力和科学素养。积极开展健康促进活动,深入开展城乡医院对口支援、东西部地区医院省际对口支援等活动,推进健康中国建设。 怎么赚钱快 现实点的  有日本媒体报道称,驻日美军整编计划包含防范中国的意图。日本时事通讯社援引美国防部官员的话称,美国“不能够把所有的鸡蛋都放在一个篮子里”,当中国的导弹瞄准驻日美军基地时,美方需要做出相应的选择。

利用OBJECT_DEFINITION函数来代码存档

  作为一名数据库管理员,在进行代码迁移之前,我总是尽力给提交于开发环境的代码一个完整的面貌。但是,不得不承认,我不能保证不发生任何可能破坏开发系统的事情。当这种情况发生时,可能的补救措施是恢复到目标代码的前一版本,目标代码可能是存储过程、函数等等。
  
  如果可能的话,你不想做但又不得不做的事情是从备份的数据库中恢复代码,但是如果备份的数据库存储在磁带上,这种方法可能因花费太长的时间而不能使用。如果数据库庞大的话,要花费相当长的时间来恢复,更不用说你还要找一台足够大的服务器来存储备份的文件。不过,还有更好的方法。
  
  很久前我找到的一种解决方法是备份数据库代码到一个独立的数据表中,这样如果在我们开发的代码发生错误时,就可以从数据表恢复出错的过程或函数。这种方法确实节省了大量的时间。
  
  在SQLServer2000中,这种方法可以这样实现:对特别的数据库做一个完整的syscomments数据表备份,然后将备份的数据表放入档案表中。我通常保存最近两周的重要过程代码。利用这种技术唯一的麻烦是:如果代码对象十分大,那么可能要对代码进行重构。因为如果代码过大将会被存储到syscomments表中不同的行中,有时这可能是件令人感到头痛的事。
  
  SQLServer2005新增加的众多功能之一是可以利用一个系统函数返回某个对象的完整代码,这个系统函数将使得存档你的过程代码变得十分简单。
  
  OBJECT_DEFINITION
  
  SQLServer2005新增的系统函数OBJECT_DEFINITION根据提供给该函数的对象ID返回对象的TSQL代码。为了更好的理解这个函数的工作过程,让我举个例子。首先我们创建一个用户自定义函数,该函数的脚本如下:
  
  CREATEFUNCTIONudf_Multiply(@Val1INT,@Val2INT)RETURNSINTASBEGINDECLARE@RetValINTSET@RetVal=(@Val1*@Val2)RETURN(@RetVal)END
  
  这是一个很简单的小函数。因为它仅仅处理两个参数,但是已足够为我们演示OBJECT_DEFINITION函数是如何工作。测试该系统函数的脚本如下:
  
  DECLARE@ObjectIDINTSET@ObjectID=OBJECT_ID('udf_Multiply')SELECTOBJECT_DEFINITION(@ObjectID)
  
  在这个例子中,我们实际上用了两个系统函数。首先,我们要得到前面创建的udf_Multiply函数的OBJECT_ID,在SQLServer数据库引擎中,OBJECT_ID是一个对象的系统标识符。然后我们将这个ID传给系统函数OBJECT_DEFINITION,这一系统函数将返回提供给它的ID对象的代码,即返回值是我们以前为udf_Multiply函数写的TSQL代码。
  
  既然我们对OBJECT_DEFINITION函数的工作原理有了很好的了解,接下来让我们看看如何利用这个函数来存档我们数据库中的过程代码。首先,运行列表A中的脚本程序在测试数据库中创建20个存储过程。
  
  DECLARE@iINTSET@i=1WHILE@i<=20BEGINEXECUTE('IFOBJECT_ID(''usp_TestProcedure'+@i+''')>0DROPPROCEDUREusp_TestProcedure'+@i+'')EXECUTE('CREATEPROCEDUREusp_TestProcedure'+@i+'ASBEGINPRINT''Thenameofthisprocedureis''+CAST(OBJECT_NAME(@@PROCID)ASVARCHAR(20))END')SET@i=@i+1END
  
  你将看到在上面的脚本中,我们使用了动态SQL语句。当创建动态SQl语句时,我习惯用系统存储过程sp_executesql,因为该过程能够很好地在系统中缓存SQL语句。但是,在我们这一例子中,EXECUTE命令就能很好地完成任务。
  
  现在我们的数据库中已经有了一些对象,我们可以创建用来存档数据库中存储过程需要的对象和代码。在列表B中的脚本可以为我们完成这项工作。
  
  IFOBJECT_ID('CodeArchive','U')>0DROPTABLECodeArchiveCREATETABLECodeArchive(ArchiveIDINTIDENTITY(1,1)PRIMARYKEY,ObjectNameSYSNAME,ObjectDescriptionVARCHAR(60),ObjectTypeCHAR(2),ObjectDefinitionVARCHAR(MAX),ObjectIDINT,CreationDateDATETIME,ModifiedDateDATETIME,EntryDateDATETIMEDEFAULT(GETDATE()))INSERTINTOCodeArchive(ObjectName,ObjectDescription,ObjectType,ObjectDefinition,ObjectID,CreationDate,ModifiedDate)SELECTso.name,so.type_desc,so.type,OBJECT_DEFINITION(object_id),so.object_id,so.create_date,so.modify_dateFROMsys.objectssoWHEREso.[type]IN('C','D','P','FN','R','RF','TR','IF','TF','V')
  
  存档方案首先要求有一个用来存储我们定义代码的表格,和在上面的表格脚本中看到的一样,我们将对象定义代码存入表格的ObjectDefinition域,这是一个VARCHAR(MAX)数据类型的域。VARCHAR(MAX)是SQLServer2005新增的一种数据类型,它可以存储高达2GB的有效数据。这样我们就不在局限于文本数据类型或者将我们的数据保存在一个单个数据页上。这种数据类型存储我们的对象毫无问题。
  
  在上面的脚本中关于插入CodeArchive表有几点值得注意的地方。首先是在查询中包含的数据类型,这些用于OBJECT_DEFINITION函数的对象类型将返回一个值。A列表中包含的。
  
  对象类型列在下面供参考。其次是脚本调用的方法,我通常是利用SQLServer的预定任务调度法执行类似的脚本(你可以按照工作要求反复的运行脚本)。无论用什么调度方法,总之你需要按照一定的规则运行脚本,这样才能在需要时恢复你的过程代码。
  
  OBJECT_DEFINITION函数用到的对象类型列表:
  
  T:检查约束。
  
  D:默认。
  
  P:TSQL存储过程。
  
  FN:TSQL数值用户自定义函数。
  
  R:规则。
  
  RF:复制过滤过程。
  
  TR:TSQL触发器。
  
  IF:TSQL内嵌函数。
  
  TF:TSQL数值函数。
  
  V:视图。
  
  存档需求
  
  希望本文对你有所帮助,如果你还没有使用过OBJECT_DEFINITION这个新函数,你最好亲自试一下。然而,在你的开发环境中设置一些代码备份系统,这样做的重要性在怎么强调也不为过。实际上,我拥有一个类似的备份系统用于我们的开发环境。
  
  如果你能设置一个类似本文提到的恢复系统,就可以进行本地或远程备份你的过程代码,当需要恢复代码时,你将会很方便地进行,而不再用查找备份文件已找到所要恢复的代码。

本文"利用OBJECT_DEFINITION函数来代码存档"由远航站长收集整理而来,仅供大家学习与参考使用。更多AG亚游集团尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 广告合作 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(AG亚游集团). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类AG亚游集团.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4
苹果狼烟四起 基本面主导还是资金博弈 前队友又狂赞詹皇!跟他打球有一点实在太舒服 普京签署命令 俄罗斯新一届政府组建完毕 虎扑不搞体育来搞吴亦凡?最新进展来了 路边捡到1沓“钞票”?大妈反被诓走7000元金项链 佛山一外卖小哥骑摩托违章959宗 扣3351分罚近18… 英国工党领袖呼吁与欧盟成立新关税同盟 澳大利亚2017年第四季度GDP同比增长2.4% 不及… 又伤右脚踝!库里赛季第4次 勇士卫冕最大变数 分析师称博通将放弃高通 转而收购Xilinx 意大利将引爆一枚二战炸弹 近万人被疏散(图) 第三届国象“弈品杯”小记者:体验采访 记录成长
空姐乘滴滴遇害 郑州警方:嫌疑人作案后弃车跳河 意大利反洗钱系统将设监管底线 金额3000欧元 组全球联盟逼伊朗重新谈判?美B计划被批系白日梦 汽车出口国拟召开会议应对美汽车关税 勇士神射发推装X被嘲讽!一次训练换6双鞋? 央视:全面提高国家治理能力和治理水平 都四亿妄为凭啥光巴黎吃瘪?曼城赢了一手瓜帅 周强:过去5年核查监外执行罪犯 收监执行6470人 抛储短期压制棉价 棉市的“一波芳华”正在酝酿 女子遭歹徒持刀入室抢劫 保姆吐出迷药打救命电话 多位大佬携款驰援乐视电视 更多是看孙宏斌面子? 中乙第七轮综述:中能两球完胜 安纳普尔那4球大胜
改号神器重压下仍有人网上叫卖:一键可变任意号码 博塔斯:被称僚机很伤人 因莱科宁而使停站更早 女排二队将战亚洲杯 辽宁四将入选为各队之最 18岁的詹科早被NBA智多星看穿 他也看走眼一人 曼联切尔西别惦记了!皇马金童:我只想留在皇马 林丹怒斥羽联众人响应 科尔丁彼得森纷纷站出来 委员建议降低制售假入罪门槛:像酒驾一样治理 俄罗斯反击美新一轮制裁:扩大黑名单中美国目标 这地方民宿成“爆款”住一晚7000元 有何特别之处 白手起家怎样创业 未来10年最赚钱行业 最有前景的十大行业 什么项目前景好 AG亚游集团