日期:2014-05-17  浏览次数:20658 次

SQL Server 2000 备份触发器
一个表是否存在触发器,可以查看sysobjects中xtype='TR'来判断,并且相关内容可以在syscomments表中得到。

然后现在的问题是,当一个触发器超过4000字节后,在syscomments中会有多笔记录,现在的问题来了,如何进行还原呢?

select *
from syscomments
where id in (select id from sysobjects 
where xtype='TR' and parent_obj=object_id(@tablename)
)


------解决方案--------------------
联机丛书上的原话:在使用 syscomments 时,请考虑使用 nvarchar(max)。 
由于当年2000设计的时候,还没有那么长的字符串,所以2000的字符类型都相对较短。如果觉得获取不了,那么尝试写脚本来生成创建语句。
另外,DDL不是频繁更新的东西,没必要经常备份吧?直接用SQLServer自带的生成脚本就可以保留起来了。如果是开发层面的保留,那可以使用源代码管理工具如visual sourcesafe这类工具来记录变更情况。
------解决方案--------------------
sql2000
把结果先生成临时表
再用游标循环处理

用UPDATETEXT循环赋值给多个变量

exec(@s1+@s2)--最后生成这样的执行语句

go

可安装个版本数据库sql2005/2008/...,可附加上数据,然后把存储过程生成脚本就行了