【发布时间】:2010-01-04 17:05:52
【问题描述】:
我正在尝试找出这是否可行,但到目前为止我还没有找到任何好的解决方案。我想要实现的是编写一个可以克隆数据库但没有存储数据的存储过程。这意味着应该包含所有表、视图、约束、键和索引,但不包含任何数据。能做到吗?
【问题讨论】:
标签: sql sql-server database sql-server-2005 clone
我正在尝试找出这是否可行,但到目前为止我还没有找到任何好的解决方案。我想要实现的是编写一个可以克隆数据库但没有存储数据的存储过程。这意味着应该包含所有表、视图、约束、键和索引,但不包含任何数据。能做到吗?
【问题讨论】:
标签: sql sql-server database sql-server-2005 clone
当然 - 您的存储过程必须读取系统目录视图以找出数据库中的对象,确定它们的潜在依赖关系,然后创建一个或一组 SQL 脚本来重新创建数据库,并且执行那些。
这是可能的 - 不是很好也不太容易做到。尤其是对象之间的依赖关系可能会比乍一看更令人头疼....
你也可以:
使用 SQL Server Management Studio 之类的工具(如果您在 SQL Server 上 - 您没有指定)并手动创建脚本,然后在单独的服务器上重新执行它们
李>使用“差异”工具(如 Redgate SQL Compare)比较两台服务器并更新第二台服务器
【讨论】:
为此,我已成功使用 Microsoft SQL Server 数据库发布向导。它非常简单,无需编码。这是一个示例调用:
sqlpubwiz script -d DatabaseName -S ServerName -schemaonly C:\Projects2\Junk\ DatabaseName.sql
我相信默认是同时创建数据和架构,但您可以使用 schemaonly 参数。
下载here
【讨论】:
在 SQL Server 中,您可以遍历系统表(sys.tables、sys.columns 等)并一次构建一个事物。一开始它会非常手动且容易出错,但它应该很快就会变得系统化。
另一种方法是使用 SMO 在 .Net 中编写一些东西。看看这个链接:
http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated
【讨论】: