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

利用OBJECT_DEFINITION函数来代码存档

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

AG亚游集团,  昨天,北京昌久律师事务所吕峰律师质疑称,如果百度进行的是经济性裁员,还需要依法履行向有关主管部门报批的程序,提出裁员理由和方案等。在获批之后,才能要求员工离开工作岗位,再进行对员工的劳动补偿。他说:“作为一个知名的上市公司,如果能做得对员工更加人性化一点,对企业的负面影响会更小。”(信报记者 贺文华)

  当然在微信陌陌附近人里以直接“约么”为开场白的不在少数,这两个字虽小,但是很容易将自己的形象毁灭得淋漓尽致,当然你确实有几率撞到正处于需求中的女性,但是这个几率毕竟还是少数,作为理智的男人我建议各位还是以比较正常礼貌的开场白为搭讪方式。女人开什么店比较好  如果在特朗普执政期间,共和党没有失去国会两院的主导权,而这三位高龄大法官因为身体原因退休或是意外去世,特朗普和主导国会的共和党顺利安排保守派大法官接替,那么美国最高法院将全面倒向保守派(7比2)。这或将深刻影响美国司法未来二十年的走向。

利用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
港媒:在紧急关头 中国寻“芯”现金流向以色列 四川米易县一水塘打捞出5名男童 均已身亡 北京查获非法批发“老冰棍” 窝点 利润超400% 俄最新民调:普京支持率微降 仍稳稳跑赢竞争对手 雅尼斯:最后一球还可以再传一下 这是比赛转折 情侣表演“书挡子弹” 女子录视频不慎枪杀男友 中国企业参与乌克兰港口建设 1年中标2项疏浚项目 大韩航空高管掌掴机场安保人员 辩称因为有急事 利物浦1将喊话C罗:史上最佳之一 要全力限制他 苏宁前10轮积分直追去年22轮 若擒上港或能登顶 U23发威击溃恒丰信心!鲁能克星今夜大球场迷失 皇马公布美国行名单:贝尔拉莫斯领衔 两新援入选
环保部副部长:大气污染治理仍负重爬坡非负重前行 台男子发动“斩首蔡英文”行动:重金悬赏开价可谈 这家公司抱错乐视大腿巨亏4.7亿 噩梦却仍没结束 为了纪念去世教练 60-0冰球锦标赛惊现篮球比分 贵州省委常委刘捷兼任省委秘书长(图/简历) 偷拍乘客,美国一司机被优步停职 金砖领导人齐声反对贸易战 谴责特朗普搞经济霸权 南澳大利亚州拟设带薪家暴假:受害者可享10天假期 特朗普喊话中东国家:出钱吧 没美军你们难撑一周 美通过法案鼓吹增强台湾防卫对抗大陆 我国台办回应 无业男PS“警官证”去保安室调监控:穿拖鞋被识破 克耶高斯调侃主场是马戏团 曾视特松加为偶像
特朗普未决定是否签“与台湾交往法案” 中方回应 印空军搞演习买战机频出招 外媒:应对中巴“挑战” 交银国际维持新浪买入评级 目标价145美元 13人轮奸4名女子 3名在逃嫌犯中2人18年后落网 护士给8岁娃输错药还吼家属:能打就打不能打就滚 集团向子公司借钱 闹“钱荒”的搜狐怎么了? 詹天佑双色球18025期分布图:红一区热度增加 美国反俄行动愈演愈烈 俄议员:已不是冷战是冰战 鲁能战天津双雄再迎登顶良机 世乒赛能提供启示 白手起家什么意思 三缺一棋牌游戏平台 未来10年暴利行业 现在什么行业挣钱快 AG亚游集团