0

これを試しALTER TABLEて列を作成し、その後にINSERT INTO. この種の機能は、前の列が終了した後に後続の各列が開始されることを除いて機能します。これがinsert intoの仕組みだと思いますが、回避策や作成できる別のクエリはありますか?

私はアップデートを試みてきましたが、うまくいきません。参考までに、これらは私が使用した変更/挿入クエリです。

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

INSERT ステートメントは、データを挿入する必要がある列が結果テーブルに 1 つしかないことを前提としています。ADD COLUMN を実行する前にテーブルにすでに他の列があった場合、これは当てはまりません。

結果テーブルの列を追跡し、各列にデータ (またはデフォルト値) を提供する必要があります。

アプリケーション内からテーブルの構造を拡張することは、かなり珍しいことです。何を達成しようとしていますか?固定テーブルを定義し、アプリケーションからデータを追加することで、これ以上の成果を上げることはできませんか?

アップデート

わかりました、私はあなたが説明していることを理解していると思います。最初の繰り返しで、ALTER TABLE は最初の列を作成します。INSERT は、この最初の列にデータを持つ一連の行を追加します。

2 回目の反復で、ALTER TABLE は 2 番目の列を作成します。INSERT は一連の新しい行を作成しますが、2 番目の列のみが入力されます。最初の列は、値を指定しなかったため、すべて NULL です。3 回目以降の繰り返しについても同様です。

ソース テーブルとそのデータを複製することが実際の目的である場合は、結果テーブルを 1 回のパスで作成する必要があります。列の構造を知っていますよね?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 に答える