intra-mart のスクリプト開発時には2waySQL(sql ファイルを指定しての実行)実装ができる。
ただ、intra-mart は並列して複数のSQL文を実行することはできず、別ファイルで定義する必要がある。(返却値が1つのSQL文の結果DBResultという形式を取るため)
ISNERT後のIDを取得する場合、INSERTとSELECTの2回の処理が必要になる。
ただ、INSERT・UPDATE時にSELECT 文ではなくOUTPUT句を使用して書くと、更新前データ・更新後データが取得することができる。
これはintra-martの2waySQLでも許容されている書き方だった。
INSERT文
INSERT Employee(id, name)
OUTPUT INSERTED.id --ここでIDを取得する
VALUES (1, 'taro');
UPDATE文
UPDATE Employee
SET id = /*newId:number*/0
OUTPUT
INSERTED.id --更新後IDを取得する
DELETED.id --更新前IDを取得する
WHERE id = /*oldId:number*/
DELETE文
-- DELETE時
DELETE FROM Employee
OUTPUT DELETED.id --ここでIDを取得する
WHERE id = /*deleteId:number*/
ただし、OUTPUT 句は
INSERTED 挿入操作または更新操作で追加される値を指定する列プレフィックスです。 INSERTED プレフィックスの付いた列は、UPDATE、INSERT、または MERGE ステートメントが完了した後の、トリガーが実行される前の値を反映します。
とあるように、予想値なのでほぼ同じ時間に複数のインサートが予想される場合やコミットさせるまで処理が長い場合は使わない方が良いですね。