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

时间:2013-05-09 18:52:14

标签: sql vba ms-access

我已尝试使用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

2 个答案:

答案 0 :(得分:1)

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

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

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

更新

好的,我想我明白你在描述什么。在第一次迭代中,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]

这是你的想法吗?

答案 1 :(得分:1)

在您进入循环之前,请创建[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