如何在没有IDENTITY的情况下从sql server获取生成的密钥



我有一个代码可以插入一行并从中检索生成的键。但是,它不能与SQL Server一起使用。我进行了研究,似乎该列需要IDENTITY属性。

不过,我已经在sql server中使用Sequence来设置该列的属性。它从1开始,递增1,最大值是某个值。我的查询使用序列插入如下行:

INSERT INTO event_master (event_id, user_id, type, detail, status, update_timestamp)
VALUES (NEXT VALUE FOR event_master_id_seq, ?,?,?,?,?)

有没有任何方法可以使用这种格式来检索生成的值(在我的例子中是event_id(?还是我必须有IDENTITY才能工作?

我想把它作为这个的副本来关闭,但这个问题没有解决或询问使用序列而不是标识列。此外,我还想清楚地表明,这适用于多行(以防您计划使用标量变量(。

DECLARE @event_ids TABLE(event_id int);
INSERT INTO dbo.event_master (event_id, ... other cols)
OUTPUT inserted.event_id INTO @event_ids
VALUES (NEXT VALUE FOR event_master_id_seq, ... other vals);
SELECT event_id FROM @event_ids;

顺便说一句,我真的希望您不要使用某些应用程序中的?占位符,您应该真正使用显式和强类型参数。我知道这在Java中比更现代的语言更难,但例如,我看到了这个答案。

相关内容

最新更新