微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – TSQL:带INSERT INTO SELECT FROM的UPDATE

所以我有一个旧的数据库,我正在迁移到一个新的数据库.新的具有略微不同但大多数兼容的模式.此外,我想从零重新编号所有表.

目前,我一直在使用我写的工具手动检索旧记录,将其插入新数据库,并更新旧数据库中的v2 ID字段,以在新数据库显示其对应的ID位置.

例如,我从MV5.Posts中选择并插入MV6.Posts.插入后,我检索MV6.Posts中新行的ID,并在旧的MV5.Posts.MV6ID字段中进行更新.

有没有办法通过INSERT INTO SELECT FROM做这个UPDATE,所以我不必手动处理每个记录?我正在使用sql Server 2005,开发版.

解决方法

迁移的关键是做几件事情:
首先,不要做任何没有当前的备份.
第二,如果密钥正在更改,您需要至少临时存储新结构中的旧的和新的(永久地,如果密钥字段暴露给用户,因为它们可能被搜索获取旧的记录).

接下来,您需要彻底了解与子表的关系.如果更改关键字段,所有相关表格也必须更改.这是存储旧密钥和新密钥的地方派上用场的地方.如果您忘记更改任何内容,数据将不再正确,无效.所以这是一个关键的一步.

挑选一些特别复杂数据的测试用例,确保为每个相关表格包含一个或多个测试用例.将现有值存储在工作表中.

要启动迁移,请使用旧表中的select插入到新表中.根据记录的数量,您可能需要循环访问批次(不能一次记录),以提高性能.如果新密钥是一个身份,您只需将旧密钥的值放在其字段中,并让数据库创建新密钥.

然后对相关的表进行相同的操作.然后使用表中的旧键值更新外键字段:

Update t2
set fkfield = newkey
from table2 t2
join table1 t1 on t1.oldkey = t2.fkfield

通过运行测试用例并将数据与迁移前存储的数据进行比较来测试迁移.彻底测试迁移数据至关重要,或者您无法确定数据与旧结构是一致的.移民是一个非常复杂的行动;它花费你的时间,并且非常有条不紊地做到这一点.

原文地址:https://www.jb51.cc/csharp/95317.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐