IB7.0 Insert〜Select〜でSelectとWhere以下でパラメータを使う

解決


えむなん  2007-01-20 08:07:21  No: 24534

環境: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以下で同時に使えないのでしょうか?


えむなん  2007-01-21 10:22:16  No: 24535

代替策が見つかりましたので解決とします。

IBSQL.SQL.Text := 'INSERT INTO TEST("A","B") VALUES(:A_NEW (SELECT B FROM TEST WHERE A = :A_OLD'));


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加