繁体   English   中英

将列从一个表复制到另一个表

[英]Copy a column from one table into another table

我已经尝试使用ALTER TABLE来创建列,然后是INSERT INTO 这种工作,除了每个后续列,在上一列结束后开始。 我想这是插入到工作中的方式,所以是否有可以构建的解决方法或其他查询?

我一直在尝试更新,但它没有成功。 作为参考,这些是我使用的alter / insert查询。

SQL = "ALTER TABLE [results] ADD COLUMN [" & fld.Name & "_result] TEXT(25)"
db.Execute SQL
SQL = "INSERT INTO [results] ([" & fld.Name & "_result]) SELECT [Result] As 
    [" & fld.Name & "_result] FROM [newtable]"
db.Execute SQL

insert语句假定结果表只有一列需要插入数据。 如果在执行ADD COLUMN之前表已经有其他列,则不太可能出现这种情况。

您需要跟踪结果表中的列,并为每列提供数据(或默认值)。

从应用程序内部扩展表的结构是相当不寻常的。 你想达到什么目的? 您确定通过定义固定表然后从应用程序添加数据来更好地完成它吗?

UPDATE

好的,我想我明白你在描述什么。 在第一次迭代中,ALTER TABLE创建第一列。 INSERT添加了一堆在第一列中包含数据的行。

在第二次交互时,ALTER TABLE创建第二列。 INSERT创建了一大堆新行,但只填充了第二列。 第一列全为NULL,因为您没有为它提供值。 依此类推第三次及以后的迭代。

如果您的实际意图是复制源表及其数据,那么您应该在一次传递中创建结果表。 你知道列结构吧? 使用CREATE TABLE语句。 然后编写一个单独的INSERT语句,如下所示:

INSERT INTO [results] 
([field1_result], [field2_result], [field3_result]) 
SELECT [Result] As 
[field1_result, [field2_result], [field3_result]] 
FROM [newtable]

这是你的想法吗?

在进入循环之前,创建[results]表格为

SQL = "CREATE TABLE [results] SELECT [primary_key] FROM [newtable]"
db.Execute SQL

然后在循环的每次迭代中执行

SQL = "ALTER TABLE [results] ADD COLUMN [" & fld.Name & "_result] TEXT(25)"
db.Execute SQL

SQL = "UPDATE [results] SET r.[" & fld.Name & "_result] = n.[Result] " & 
      "FROM [results] r, [newtable] n " &
      "WHERE r.[primary_key] = n.[primary_key]"
db.Execute SQL

所以,如果你在前两次迭代中有[newtable] ,那么

[primary_key] [Results]    [primary_key] [Results]
     1           A              1           D
     2           B              2           E
     3           C              3           F

你的[results]表(在上面的两次迭代之后)看起来像

[primary_key] [fld1_result] [fld2_result]
     1             A             D
     2             B             E
     3             C             F

暂无
暂无

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

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