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生成脚本吗?
这将仅生成模式.如果您还要执行数据生成脚本,请在步骤6)中单击"高级"按钮并向下滚动到"脚本数据类型",然后将其从"仅架构"更改为"仅数据"或"架构和数据"
在您的情况下,您可以为所有小配置表执行"架构和数据",然后对不希望导出数据的大型表执行"仅架构".
我知道这不是完全自动化的,但它非常接近.如果您想进一步查看自动化,请查看此主题.不确定这是否适用于SQL 2005:
如何在SQL Server Management Studio 2008中自动执行"生成脚本"任务?
我解决如下。我创建了一个自定义 winform 应用程序来导出他们的数据:
我有一个自定义 winform 应用程序,在我的开发系统上本地使用来导入数据:
这种方法对于我的数据库来说效果很好,但对于某些数据库设计我不一定建议这样做。就我而言,有许多“小”配置表,只有几个“大”表,它们之间的关系最小,因此我可以轻松忽略大表。如果存在更复杂的关系,这可能不是一个好的解决方案......
到目前为止似乎效果很好。我希望找到一种无需编写自定义代码即可实现此目的的好方法,但我只用了几个小时的开发时间就让它工作了。
仅供参考,我几乎可以与 sqlpubwiz 一起使用,但是编写数据脚本的选项是全有或全无...您不能忽略特定的表...这对我的应用程序来说是一个交易破坏者。SMO 中的 Transfer 对象是一个非常有用的类 - 它只需要几行代码即可编写整个数据库模式的脚本,包括按照正确的创建顺序重新创建数据库的所有依赖项!
http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.transfer.aspx