如何在Sql Server中的两个数据库中连续同步模式(用于单元测试)

时间:2011-02-23 11:32:28

标签: sql-server

我们有一个数据库,我们针对需要数据库的组件运行单元测试(出于几个原因,我们并没有到处嘲笑DAL)。

我们正在使用Sql Server 2008 R2,在开发数据库服务器中,我们有开发数据库(ApplicationName_Dev)和测试数据库(ApplicationName_UT)。

单元测试会创建他们需要的测试数据,然后将其删除,这样当没有测试运行时,表可能/应该为空。

问题是保持单元测试数据库的架构是最新的。

对我来说最好的解决方案(根据我的有限知识)将有一个Sql Server Agent作业,该作业每晚运行一次(或手动启动时)将丢弃UT数据库中的所有表,生成一个创建脚本对于Dev-database中的所有表,索引和关系,并在UT数据库上运行create scripts。请注意,我们不需要插入任何数据。

是否有任何方式可以通过编程方式(T-Sql,SMO等)生成包含索引和关系的所有表的创建脚本

在Management Studio中,我可以右键单击数据库 - >任务 - >生成脚本...->选择Objects-> Tables,我只获取我想要的脚本(“Use [ApplicationName_Dev”除外] ]“在第一行。

请帮忙。

此致 的Mathias

2 个答案:

答案 0 :(得分:1)

我创建了一个SSIS包 - 有一个名为“传输SQL Server对象任务”的任务。指定源和目标连接&数据库,将DropObjectsFirst设置为True,CopyAllObjects(或仅CopyAllTablesCopyAllViews),也应该设置。 (显然,不要将CopyData设置为true)。

您还需要为所需的表结构设置CopyIndexes和其他此类表格选项。

设置作业以运行SSIS包也很容易。

答案 1 :(得分:0)

您可以使用SQL Delta之类的工具。您可以使用SQL Delta创建“脚本”(SQL Delta特定脚本),实质上,您可以将源数据库与目标数据库同步。如果需要,它还可以将数据输入到一些或所有表中。

使用Scheduler(Windows的一部分)使用预定作业可以自动完成整个过程。