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