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

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

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...