次のように配置された複合主キーを持つテーブルがあります。
CREATE TABLE [dbo].[mytable]
(
[some_id] [smallint] NOT NULL,
[order_seq] [smallint] NOT NULL,
-- etc...
)
これらの列はどちらも主キーの一部です (実際には、実際のテーブルでは 4 つの部分からなる PK ですが、例のために簡略化しています)。どの列も ID ではありません。order_seq
指定された次のレコードに新しいレコードを挿入するストアド プロシージャを作成していsome_id
ます。
CREATE PROCEDURE some_proc
(
@some_id smallint,
@newSeq smallint OUTPUT
)
AS
BEGIN
insert into mytable (some_id, order_seq)
values
(
@some_id,
(select max(order_seq) + 1 from mytable where some_id = @some_id)
)
set @newSeq = /* order_seq of the newly-inserted row */
END
@newSeq の設定方法を知る必要があります。同時実行の問題に遭遇したくないため、挿入後に選択クエリを実行することは避けたいと思います。テーブルをロックしたり、トランザクションを使用したりすることは禁止されています (質問しないでください)。
私の知る限りSCOPE_IDENTITY()
、どの列もIDではないため使用できません。どうすればnewSeq
正しく設定できますか?