2013-05-09 3 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 -в-их-титры). Нет, не стоит. – phadaphunk

+1

В чем проблема? (Вы описываете «решение», которое не работает. Вместо этого вы должны описать реальную проблему.) –

+0

Я упомянул, что .. данные в столбцах, которые добавляются после начала предыдущих столбцов, заканчиваются.Я хочу, чтобы все они начинались в верхней части – gta0004

ответ

1

Ваш оператор 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] 

Это вы имеете в виду?

+0

Итак, я должен сначала добавить все столбцы, а затем поместить данные в эти столбцы? – gta0004

+0

Обычно люди сначала создают таблицу со всеми ее столбцами. Затем, когда приложение запускается, оно обрабатывает данные в таблице с помощью операций SELECT, INSERT, UPDATE и DELETE. Это обычно добавляет строки, а не столбцы. Приложение обычно не создает столбцы «на лету». Но это зависит от того, что вы пытаетесь сделать. – criticalfix

+0

@ gta0004 Я обновил свой ответ. – criticalfix

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. [Result] FROM [results] r' по какой-то причине? – gta0004

+0

Хорошо. Мне пришлось сделать Update-Inner Join-Set, потому что по какой-то причине вы не работали. Также для доступа это SELECT .. INTO .. ​​FROM вместо Create Table As .. Вы установили меня на правильный путь, так что TYVM! Также я не знал, что вы можете переименовать в запросах. Это довольно здорово. – gta0004

Смежные вопросы