環境:Delphi2005+Interbase7.0
以下のようなデータがあるとします
A B
----
1 10
2 20
----
ここから下のようにするとします。
(A=1の行をベースにAの値だけ変えて、他は同じ行を挿入する)
A B
----
1 10
2 20
3 10 <= Insert
----
そのために以下のように組んだのですが、うまくいきません。
IBSQL.SQL.Text := 'INSERT INTO TEST("A","B") SELECT :A_NEW, B FROM TEST WHERE A = :A_OLD';
IBSQL.ParamByName('A_NEW').AsInteger := 3;
IBSQL.ParamByName('A_OLD').AsInteger := 1;
→×エラーなし。何もINSERTされない
条件を少し変えると以下のようになりました。
A_NEWをパラメータを使わず直書き(〜 SELECT 3, B FROM 〜)→○
A_OLDをパラメータを使わず直書き(〜 WHERE A = 1)→○
SELECT文だけ抜き出してみて実行(SELECT :A_NEW,〜A = :A_OLD)→×Dynamic SQL Error Data Type Unknown
パラメータはSELECT以下とWHERE以下で同時に使えないのでしょうか?
代替策が見つかりましたので解決とします。
IBSQL.SQL.Text := 'INSERT INTO TEST("A","B") VALUES(:A_NEW (SELECT B FROM TEST WHERE A = :A_OLD'));
ツイート | ![]() |