gpt4 book ai didi

c# - TSQL:使用 INSERT INTO SELECT FROM 进行更新

转载 作者:可可西里 更新时间:2023-11-01 08:36:19 24 4
gpt4 key购买 nike

所以我有一个旧数据库,我正在迁移到一个新数据库。新的架构略有不同但大部分兼容。此外,我想从零开始对所有表格重新编号。

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

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

有没有办法通过 INSERT INTO SELECT FROM 执行此更新,这样我就不必手动处理每条记录?我使用的是 SQL Server 2005 开发版。

最佳答案

迁移的关键是做几件事:首先,不要在没有当前备份的情况下做任何事情。其次,如果键会发生变化,您需要至少暂时将新旧结构都存储在新结构中(如果键字段向用户公开,则永久存储,因为他们可能会通过它搜索旧记录)。

接下来您需要对子表的关系有一个透彻的了解。如果更改键字段,则所有相关表也必须更改。这是同时存储新旧 key 的派上用场的地方。如果您忘记更改其中任何一个,数据将不再正确且无用。所以这是关键的一步。

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

要开始迁移,您使用旧表中的选择插入到新表中。根据记录的数量,您可能希望循环遍历批处理(而不是一次一条记录)以提高性能。如果新键是一个身份,您只需将旧键的值放在它的字段中,让数据库创建新键。

然后对相关表做同样的事情。然后使用表中的旧键值更新外键字段,如下所示:

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

通过运行测试用例并将数据与迁移前存储的数据进行比较来测试您的迁移。彻底测试迁移数据非常关键,否则您无法确定数据是否与旧结构一致。迁移是一项非常复杂的操作;花点时间并有条不紊地彻底完成它是值得的。

关于c# - TSQL:使用 INSERT INTO SELECT FROM 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com