如何将架构和一些数据从SQL Server复制到另一个实例?

ran*_*own 4 sql sql-server sql-server-2005

我的产品使用SQL Server数据库 - 每个客户端在自己的Intranet上都有自己的部署实例.db有大约200个表.它们中的大多数是只有几行的配置表,但是有几个可能有几百万行的事务数据表.我经常需要解决客户的配置问题,所以我需要他们的数据库副本才能在我的开发系统上本地工作......但是由于交易数据可能会非常大,这使得客户很难发送我是一个备份工作.我需要一种方法来备份/复制/导出除大表之外的所有内容.

理想情况下,大型表实际上属于单独的数据库目录,因此客户可以将其"数据"与其"配置"分开备份.但是,我没有权限进行这种类型的更改,因此我正在寻找一种很好的方法来导出或复制配置部件而无需复制整个部分.

目前我有一个快速而又脏的.NET应用程序,它使用SQL Adapter和DataSet从所有表中盲目地选择*除了我要省略的那些,将其转储到XML文件(这是我的穷人的导出功能).我有一个伴侣应用程序,我可以在本地使用将XML加载回DataSet,然后使用SQLBulkCopy将其加载到我的开发数据库中.我不得不做一些技巧来禁用约束等等,但我让它成功了.这让我得到了数据,但不是模式....理想情况下,我想要一种方法来获取模式.这是一种蛮力的方法,我相信必须有一种更简单的方法.有关更好方法的任何建议吗?

该解决方案需要自动化,因为我正在与通常几乎没有IT支持的最终用户打交道.

(SQL 2005及更高版本)

Joh*_*hnD 14

你能直接从SSMS生成脚本吗?

  1. 右键单击数据库
  2. 选择任务 - >生成脚本
  3. (如果您获得介绍屏幕,请单击"下一步")
  4. 选择"选择特定数据库对象"
  5. 选择对象来生成脚本(表,存储过程等......)
  6. 单击"下一步",然后指定输出文件名
  7. 单击"完成"以生成脚本

这将仅生成模式.如果您还要执行数据生成脚本,请在步骤6)中单击"高级"按钮并向下滚动到"脚本数据类型",然后将其从"仅架构"更改为"仅数据"或"架构和数据"

在您的情况下,您可以为所有小配置表执行"架构和数据",然后对不希望导出数据的大型表执行"仅架构".

我知道这不是完全自动化的,但它非常接近.如果您想进一步查看自动化,请查看此主题.不确定这是否适用于SQL 2005:

如何在SQL Server Management Studio 2008中自动执行"生成脚本"任务?


小智 11

因为我们过去遇到过类似的问题,所以只有几条评论.

SSMS中的生成脚本选项非常适合小型数据库,您可以在其中手动重新排序单个脚本并避免依赖性问题.不确定为什么这么多人建议使用这个具有依赖性问题的功能.

对于较大的数据库,只有您自己创建或使用第三方工具的可行解决方案.

我们最终使用了这个第三方工具.SQL Packager在我们评估时工作得更好但我们设法基本上免费获得其他工具......

无论如何,希望这有帮助,即使这是一个迟到的答案/评论......


ran*_*own 2

我解决如下。我创建了一个自定义 winform 应用程序来导出他们的数据:

  1. 使用 SMO(传输类)将整个架构编写到 .sql 文件中
  2. 使用以下命令循环遍历所有指定的表(实际上我只是列出了要忽略的大增长表,并处理其他所有内容): select * from
  3. 将记录捕获到 DataTable 对象中并将它们转储到 .xml 文件
  4. 将整个文件夹压缩起来并发回给我

我有一个自定义 winform 应用程序,在我的开发系统上本地使用来导入数据:

  1. 创建一个空数据库
  2. 运行 .sql 文件来构建架构
  3. 禁用所有表上的所有约束(使用 sp_foreachtable)
  4. 循环遍历所有 .xml 文件并使用 SqlBulkCopy 对象批量导入它们
  5. 重新启用所有约束(使用 sp_foreachtable)

这种方法对于我的数据库来说效果很好,但对于某些数据库设计我不一定建议这样做。就我而言,有许多“小”配置表,只有几个“大”表,它们之间的关系最小,因此我可以轻松忽略大表。如果存在更复杂的关系,这可能不是一个好的解决方案......

到目前为止似乎效果很好。我希望找到一种无需编写自定义代码即可实现此目的的好方法,但我只用了几个小时的开发时间就让它工作了。

仅供参考,我几乎可以与 sqlpubwiz 一起使用,但是编写数据脚本的选项是全有或全无...您不能忽略特定的表...这对我的应用程序来说是一个交易破坏者。SMO 中的 Transfer 对象是一个非常有用的类 - 它只需要几行代码即可编写整个数据库模式的脚本,包括按照正确的创建顺序重新创建数据库的所有依赖项!

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.transfer.aspx