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

Sql 将触发器从一个数据库复制到另一个数据库,sql,sql-server,sql-server-2005,triggers,Sql,Sql Server,Sql Server 2005,Triggers,在MS SQL Server 2005中执行的脚本中,是否可以将触发器从一个数据库复制到另一个数据库 我被要求为我的项目正在使用的触发器编写一个测试脚本。我们的测试结构是创建一个只包含被测对象的空数据库,然后在该数据库上执行一个脚本,该脚本创建测试所需的所有其他对象,填充它们,运行所需的任何测试,将结果与预期结果进行比较,然后删除除被测对象之外的所有内容 我不能只创建一个除触发器外为空的数据库,因为触发器依赖于多个表。我的测试脚本当前在创建所有必需的表之后运行CREATE触发器,但这不起作用,因

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

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

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


有人建议,我不运行CREATE触发器,而是在脚本中的该点将触发器从实时数据库复制到测试数据库。我已经在谷歌上快速搜索了一下,但还没有找到一种方法来做到这一点。因此,我的问题是——这可能吗?如果可能,我该怎么做?

您可以使用
sp\u helptext(triggername)

或者,您可以将文本选择为变量并执行以下操作:

declare @sql varchar(8000)


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

EXEC @sql

我有一个存储过程,它将一组表复制到测试数据库中。为了减少可能更改错误数据库的错误,我希望避免使用
USE
,而是明确指定触发器从哪个数据库复制到哪个数据库

在的帮助下,我提出了以下解决方案:

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;

谢谢,太棒了。通过一些使用和EXEC(@sql),这正是我想要的。