首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并数据库-标识列删除

合并数据库-标识列删除
EN

Stack Overflow用户
提问于 2011-04-27 09:37:23
回答 1查看 983关注 0票数 0

我需要创建一个能够合并客户端生产数据库的工具。通常,这些数据库将有相同的模式(稍后我会做一些检查,但现在我们假设是的)。对重复数据的过滤也是以后要做的事情。这需要自动完成(因此不需要通过SSMS等方式生成脚本)。我已经有几次不得不重新开始,因为每次我遇到问题时,我都没有想过,所以这一次我想征求你们的意见,然后再重新开始。

我目前的行动计划是:

  • 从数据库1复制模式(稍后我将在这里添加一些检查,以确定模式在所有表上是不同的
  • 循环,并将所有外键更新设置为级联,并设置表数据需要插入的顺序(因此,包含PK的第一个表,然后包含FK的表)
  • 循环每个表的顺序是正确的

代码语言:javascript
复制
- 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-25 05:03:30

我不确定您在这里试图完成什么,但是管理数据库版本是我非常感兴趣的事情。

看看DBSourceTools ( http://dbsourcetools.codeplex.com )。

将整个数据库脚本写入磁盘是一种实用工具,包括所有外键约束和数据。

使用部署目标,您将能够在另一个数据库服务器(通常是本地机器)上重新创建这些数据库。

该工具将使用script处理依赖关系和大型数据库表--尝试生成一个包含50,000个insert语句的脚本将是一场噩梦。

玩得开心。

免责声明:我参与了http://dbsourcetools.codeplex.com项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5802042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档