intra-martのスクリプト開発時にインサートと同時にIDも欲しい時のSQL[SQLServer]

2020年05月24日 00時05分

intra-mart のスクリプト開発時には2waySQL(sql ファイルを指定しての実行)実装ができる。

ただ、intra-mart は複数のクエリを実行する際には別ファイルで定義する必要がある。(返却地がDBResultという値なので 1 つのクエリに 1 つの結果という形を保持するためにも必要だと考えている)

なので SELECT 文ではなくOUTPUT句を使用して書くと良い。

INSERT HOGE
    OUTPUT INSERTED.id  --ここでIDを取得する
VALUES ('foo', 'var');

ただし、OUTPUT 句は

INSERTED 挿入操作または更新操作で追加される値を指定する列プレフィックスです。 INSERTED プレフィックスの付いた列は、UPDATE、INSERT、または MERGE ステートメントが完了した後の、トリガーが実行される前の値を反映します。

OUTPUT 句 (Transact-SQL)

とあるように、予想値なのでほぼ同じ時間に複数のインサートが予想される場合は使用するべきではないと考えている。