在MS SQL Server 2005中执行的脚本中,是否有可能将触发器从一个数据库复制到另一个数据库?
我被要求为我的项目正在使用的触发器编写测试脚本。我们的测试结构是创建一个只包含被测对象的空数据库,然后在该数据库上执行一个脚本,创建测试所需的所有其他对象,填充它们,运行所需的任何测试,将结果与预期结果进行比较,然后丢弃除测试对象以外的所有内容。
除了触发器之外,我不能只创建一个空的数据库,因为触发器依赖于几个表。我的测试脚本当前在创建所有必需的表之后运行CREATE TRIGGER,但这不会,因为测试脚本不允许包含被测对象。
有人建议,不是运行CREATE TRIGGER,而是以某种方式将脚本中的触发器从实时数据库复制到测试数据库。我有一个快速的谷歌,并没有找到办法做到这一点。因此我的问题 - 这甚至是可能的,如果是的话,我该怎么做呢?
答案 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;