繁体   English   中英

在表中为另一个表中的每个id插入行

[英]Insert row in table for each id in another table

我试着在这里搜索类似的解决方案,但没有看到一个,所以我想知道什么是实现以下的最佳方法。

我有一个1700万行的表都有一个唯一的ID。 我们最近创建了一个新表,它将与前一个表一起使用,其中新表的外键是旧表的唯一ID。

对于前者
表1 - id,field1,field2,field3 ...表2 - table1.id,field1 ...

问题是因为我们正在将它迁移到实时环境中,我们需要在表1中为表1中的每一行填充包含表1的id的行.ex,表1 - 1,test,null表2现在需要为table1中的每一行提供:1,null,...等等。 主要问题是表1中的id不是全部顺序的,因此我们必须从表1中读取,然后根据找到的id插入到表2中。

有没有更简单的方法去做? 在此先感谢乔

另外要澄清的是,表2将是新数据,它将包含在表1中的唯一内容是保持外键关系的id

这也是sql server 2000

如果我理解正确,你需要table2中的每条记录中的一条记录。 另外我认为除了对table1的引用之外,table2最初应该包含空行。

所以假设

table1 (ID, field1, field2, ...)
table2 (ID, table1_ID, fieldA, fieldB,...)
-- where table1_ID is a reference to ID of table1

创建table2后,您只需运行此insert语句即可

insert into table2(table1_ID) 
select ID from table1

我不确定我是否正在关注你,但这样的事情对你有用吗?

INSERT INTO table2 ( SELECT field1, field2, field3... FROM table1 )

如果我正确理解你想在table2中为table1中的每条记录创建一条记录。 这样就可以了。 只需按正确顺序匹配select中的字段,并为table1中没有table1中的任何字段指定常量。

HTH。 让我知道,如果我不理解,我会再次尝试帮助。

你需要阅读这篇文章。

什么是最常见的SQL反模式?

主要问题是表1中的id不是全部顺序的,因此我们必须从表1中读取,然后根据找到的id插入到表2中

是的,请看上面文章中的答案,并使用Item#2编写一个键行走循环。

确保在编写insert语句时,提供了一个字段列表 - 正如我在第1项中所说的那样。

使用这么多行,您可能会遇到事务日志空间问题,以及运行大型插入事务的时间长度。

如果运行时间是一个约束,我会认真推荐使用Bcp(或者根据平台不同的工具适用)

从原始表中选择id,使用它为扩展表构建Bcp文件,然后将其Bcp。

你们很多人发现,在10,000个记录的文件中,Bcp的性能更高,而不是一个包含17,000,000行的humungus文件。

此外,您可以在上线之前在后台执行此操作,并编写一个t-sql作业来接收,并且在您使用id的snapshop之后可能已插入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM