将触发器从一个数据库复制到另一个

时间:2009-11-27 08:53:40

标签: sql sql-server sql-server-2005 triggers

在MS SQL Server 2005中执行的脚本中,是否有可能将触发器从一个数据库复制到另一个数据库?

我被要求为我的项目正在使用的触发器编写测试脚本。我们的测试结构是创建一个只包含被测对象的空数据库,然后在该数据库上执行一个脚本,创建测试所需的所有其他对象,填充它们,运行所需的任何测试,将结果与预期结果进行比较,然后丢弃除测试对象以外的所有内容。

除了触发器之外,我不能只创建一个空的数据库,因为触发器依赖于几个表。我的测试脚本当前在创建所有必需的表之后运行CREATE TRIGGER,但这不会,因为测试脚本不允许包含被测对象。

有人建议,不是运行CREATE TRIGGER,而是以某种方式将脚本中的触发器从实时数据库复制到测试数据库。我有一个快速的谷歌,并没有找到办法做到这一点。因此我的问题 - 这甚至是可能的,如果是的话,我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

您可以使用sp_helptext (triggername)

阅读触发器的文本

或者您可以将文本选择到变量中并执行:

declare @sql varchar(8000)


select @sql = object_definition(object_id) 
from sys.triggers
where name = 'testtrigger'

EXEC @sql

答案 1 :(得分:0)

我有一个存储过程,可以将一堆表复制到测试数据库。为了减少可能会更改错误数据库的错误,我想避免使用USE,而是根据每个语句显式指定触发器从哪个数据库复制到哪个数据库。

this answer的帮助下,我想到了以下解决方案:

DECLARE @sql NVARCHAR(MAX);
EXEC SourceDB.sys.sp_executesql
    N'SELECT @output = (SELECT OBJECT_DEFINITION(OBJECT_ID(''TriggerName'')))',
    N'@output VARCHAR(MAX) OUTPUT',
    @output = @sql OUTPUT;
EXEC DestDB.sys.sp_executesql @sql;