我们有一个数据库,我们针对需要数据库的组件运行单元测试(出于几个原因,我们并没有到处嘲笑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
答案 0 :(得分:1)
我创建了一个SSIS包 - 有一个名为“传输SQL Server对象任务”的任务。指定源和目标连接&数据库,将DropObjectsFirst
设置为True,CopyAllObjects
(或仅CopyAllTables
和CopyAllViews
),也应该设置。 (显然,不要将CopyData
设置为true)。
您还需要为所需的表结构设置CopyIndexes
和其他此类表格选项。
设置作业以运行SSIS包也很容易。
答案 1 :(得分:0)
您可以使用SQL Delta之类的工具。您可以使用SQL Delta创建“脚本”(SQL Delta特定脚本),实质上,您可以将源数据库与目标数据库同步。如果需要,它还可以将数据输入到一些或所有表中。
使用Scheduler(Windows的一部分)使用预定作业可以自动完成整个过程。