我有一个带有复合主键的表,排列如下:
CREATE TABLE [dbo].[mytable]
(
[some_id] [smallint] NOT NULL,
[order_seq] [smallint] NOT NULL,
-- etc...
)
这两个列都是主键的一部分(它实际上是真实表上的 4 部分 PK,但为了示例,我已经对其进行了简化)。没有一列是身份。我正在编写一个存储过程,它在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()
,因为没有一列是身份。如何newSeq
正确设置?