0

我已经尝试过ALTER TABLE创建列,然后是INSERT INTO. 这种作品,除了每个后续列在前一列结束之后开始。我想这就是 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
4

2 回答 2

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
于 2013-05-09T19:50:58.167 回答
1

您的插入语句假定结果表只有一列需要插入数据。如果在您执行 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]

这是你的想法吗?

于 2013-05-09T19:04:23.587 回答