2

2 つのテーブルに挿入しています。最初のテーブルには、新しい「アイテム」が入ります。多くのフィールドがありますが、簡単にするために、必要なものだけを示します。これは私のコールドフュージョンのページです:

<cfquery>
    INSERT INTO my_item_table (itemid, a bunch of other stuff)
    VALUES (itemid_sequence.nextval, a bunch of other stuff)
</cfquery>

私の問題は、その自動インクリメントされた itemid を値として別のテーブル、ファイル添付テーブルに挿入したいということです。同じコールドフュージョンのページ:

<cfquery>
    INSERT INTO my_attachments_table (attachno, itemid, filename)
    VALUES (attachment_sequence.nextval, **AUTO-INCREMENT VALUE HERE**, '#url.fileName#')
</cfquery>

最初のテーブルに入力されたばかりの値について項目テーブルをクエリできることはわかっていますが、可能性は低いですが、ユーザー入力が一意ではない可能性があります。つまり、同じフィールドのクエリがより多くを返す可能性があります。一列より。その場合、itemid を取得できませんでした。クエリで作成された itemid が唯一の一意の識別子です。

私の質問は: auto=increment をクエリ内の値に設定して、外部で使用できるようにする方法はありますか? そうでない場合、itemid を取得する方法を教えてください。ありがとう。

4

2 に答える 2

5

ColdFusion 8/9/10 で insert via を実行すると、挿入された行 (または行) の ID がタグの結果属性に返されます。たとえば、SQL Server を使用している場合、result_name.IDENTITYCOL は挿入された行の ID への参照です。MySQL を使用している場合は、result_name.GENERATED_KEY です。

于 2012-08-07T13:12:17.937 に答える
1

次のようなクエリを使用して、次のシーケンス値を変数に取得することから始めることができます。

SELECT itemid_sequence.nextval FROM DUAL

(DUAL は Oracle のダミー テーブルです)。その後、両方の INSERT クエリでこの変数を使用できます。

別のオプション: 両方のクエリを実行するストアド プロシージャをデータベースに作成します。

于 2012-08-07T13:03:03.590 に答える