你将看到在上面的脚本中,我们使用了动态SQL语句。当创建动态SQl语句时,我习惯用系统存储过程sp_executesql,因为该过程能够很好地在系统中缓存SQL语句。但是,在我们这一例子中,EXECUTE命令就能很好地完成任务。
现在我们的数据库中已经有了一些对象,我们可以创建用来存档数据库中存储过程需要的对象和代码。在列表B中的脚本可以为我们完成这项工作。
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')存档方案首先要求有一个用来存储我们定义代码的表格,和在上面的表格脚本中看到的一样,我们将对象定义代码存入表格的ObjectDefinition域,这是一个VARCHAR(MAX)数据类型的域。VARCHAR(MAX)是SQL Server 2005新增的一种数据类型,它可以存储高达2GB的有效数据。这样我们就不在局限于文本数据类型或者将我们的数据保存在一个单个数据页上。这种数据类型存储我们的对象毫无问题。
在上面的脚本中关于插入CodeArchive表有几点值得注重的地方。首先是在查询中包含的数据类型,这些用于OBJECT_DEFINITION函数的对象类型将返回一个值。A列表中包含的
对象类型列在下面供参考。其次是脚本调用的方法,我通常是利用SQL Server的预定任务调度法执行类似的脚本(你可以按照工作要求反复的运行脚本)。无论用什么调度方法,总之你需要按照一定的规则运行脚本,这样才能在需要时恢复你的过程代码。
OBJECT_DEFINITION函数用到的对象类型列表:
存档需求
希望本文对你有所帮助,假如你还没有使用过OBJECT_DEFINITION这个新函数,你最好亲自试一下。然而,在你的开发环境中设置一些代码备份系统,这样做的重要性在怎么强调也不为过。
实际上,我拥有一个类似的备份系统用于我们的开发环境。假如你能设置一个类似本文提到的恢复系统,就可以进行本地或远程备份你的过程代码,当需要恢复代码时,你将会很方便地进行,而不再用查找备份文件已找到所要恢复的代码。
评论加载中…
![]() |