我需要创建一个能够合并客户端生产数据库的工具。通常,这些数据库将有相同的模式(稍后我会做一些检查,但现在我们假设是的)。对重复数据的过滤也是以后要做的事情。这需要自动完成(因此不需要通过SSMS等方式生成脚本)。我已经有几次不得不重新开始,因为每次我遇到问题时,我都没有想过,所以这一次我想征求你们的意见,然后再重新开始。
我目前的行动计划是:
- Check in database 2 table for identity column, if so, retrieve the current seed value from the corresponding table in database 1, drop identity property on database 2 table and update each ID to newID = currentID + seed(to avoid duplicate primary keys later on)
- Generate insert script(SMO's Table.EnumScript) for database 1 table
- Generate insert script(SMO's Table.EnumScript) for database 2 table
- Execute every line in database 1 insert script on the new database
- Execute every line in database 2 insert script(which now has primary keys/identity field data that will follow the ones in database 1) on the new database
测试时一切正常工作(禁用SSMS中的identity属性,创建一个the脚本,用给定的种子更新每一行,.)但是现在的问题是在C#中自动化这一点,更具体地说是禁用identity属性。这似乎没有一个干净的解决方案。创建一个新的表和重建每个约束等似乎是错误的方式,因为我需要它的唯一原因是级联每一个FK,所以一切仍然指向正确的位置。
另一种方法是延迟更新标识列数据,并在脚本生成后和插入新数据库之前对其进行更改。但是,我需要知道哪些数据指向哪个其他数据,而所有内容都在字符串中(插入脚本)。
对于如何处理这个问题,有什么建议、想法或技巧吗?
我知道Red的SQL比较,它确实很棒,但需要自己编写程序。
使用: SMO,Server 2005-2008R2(客户端服务器上没有开发人员或企业版),ADO.NET,C#,.NET Framework2.0,Visual 2008
发布于 2011-06-25 05:03:30
我不确定您在这里试图完成什么,但是管理数据库版本是我非常感兴趣的事情。
看看DBSourceTools ( http://dbsourcetools.codeplex.com )。
将整个数据库脚本写入磁盘是一种实用工具,包括所有外键约束和数据。
使用部署目标,您将能够在另一个数据库服务器(通常是本地机器)上重新创建这些数据库。
该工具将使用script处理依赖关系和大型数据库表--尝试生成一个包含50,000个insert语句的脚本将是一场噩梦。
玩得开心。
免责声明:我参与了http://dbsourcetools.codeplex.com项目。
https://stackoverflow.com/questions/5802042
复制相似问题