2013-05-09 158 views
0

我试图用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

[我应该把标签在我的问题标题(http://meta.stackexchange.com/questions/19190/should-questions-include-tags -in-他们-标题)。不,你不应该。 – phadaphunk 2013-05-09 18:53:05

+1

真正的问题是什么? (你正在描述一个不起作用的“解决方案”,你应该描述一下真正的问题) – 2013-05-09 18:55:20

+0

我提到过......在上一列结束后,开始添加的列中的数据开始。我希望他们全部从顶部开始 – gta0004 2013-05-09 18:56:22

回答

1

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

这是你的想法吗?

+0

所以我应该首先添加所有列,然后将数据放入这些列中? – gta0004 2013-05-09 19:07:29

+0

通常人们首先创建所有列的表。然后,当应用程序运行时,它使用SELECT,INSERT,UPDATE和DELETE操作来处理表中的数据。通常会添加行,而不是列。应用程序通常不会即时创建列。但这取决于你想要做什么。 – criticalfix 2013-05-09 19:24:19

+0

@ gta0004我已经更新了我的答案。 – criticalfix 2013-05-09 19:39:16

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 
+0

生病的家伙。这看起来应该可以工作,但是它会给'n。[结果] FROM [results] r'上的语法错误(缺少运算符)出于某种原因? – gta0004 2013-05-09 20:57:30

+0

好的。我不得不做Update-Inner Join-Set,因为你的某些原因没有工作。同样对于访问它是SELECT .. INTO .. FROM而不是Create Table As ..你确实将我设置在正确的路径上,所以TYVM!另外我不知道你可以在查询中进行重命名。这非常棒。 – gta0004 2013-05-09 21:35:01

相关问题