2017-09-09 6 views
0

私のプロジェクトでは、プライマリキーの値を自動生成してデータを挿入し、この番号を他のテーブルの外部に再利用するスクリプトを作成する必要があります。DB2 with文で最後のIDを保持する

私はその値を保持するために、ステートメントを使用しようとしています。例えば

は、私はこれをやろうとしている:

WITH tmp as (SELECT ID FROM (INSERT INTO A ... VALUES ...)) 
INSERT INTO B ... VALUES tmp.ID ... 

しかし、私はそれを動作させることはできません。 少なくともそれは可能ですか、まったく間違っていますか?

が(このオブジェクトは、数列を生成)あなたはシーケンス・オブジェクトと自動インクリメントフィールドを作成する必要がありますあなたは私の理解

あたりとして

答えて

1

あなたのDB2サーバーのバージョンは構文をサポートしている場合は、[はい、それは、可能です。例えば

create table xemp(id bigint generated always as identity, other_stuff varchar(20)); 

テーブルothertab(xemp_id BIGINT)を作成します。あなたが別のテーブル移入するためにIDを再利用したい場合は

ID     
-------------------- 
        1 
        2 
        3 
        4 

    4 record(s) selected. 

SELECT id FROM FINAL TABLE 
    (INSERT INTO xemp(other_stuff) 
    values ('a'), ('b'), ('c'), ('d') 
    ) ; 

上記のコードスニペットは、以下の結果を与える

with tmp1(id) as (SELECT id FROM new TABLE (INSERT INTO xemp(other_stuff) values ('a1'), ('b1'), ('c1'), ('d1')) tmp3) 
, tmp2 as (select * from new table (insert into othertab(xemp_id) select id from tmp1) tmp4) 
select * from othertab; 
+0

うん、大丈夫を...私はinsertステートメントで直接withステートメントを使用しようとしていた...ありがとう、私はそれを試してみましょう;) –

+0

非常にうまく動作します!ありがとうございました –

0

ありがとうございます。

あなたは自動インクリメント値を達成するためにSEQUENCEを作成することができます。

CREATE SEQUENCE seq_person 
    MINVALUE 1 
    START WITH 1 
    INCREMENT BY 1 
    CACHE 10 
関連する問題