【问题标题】:How to obtain generated key from sql server without IDENTITY?如何在没有 IDENTITY 的情况下从 sql server 获取生成的密钥?
【发布时间】:2020-09-24 15:19:02
【问题描述】:

我有一个代码可以插入一行并从中检索生成的密钥。但是,它不适用于 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 才能使其工作?

【问题讨论】:

标签: java sql-server


【解决方案1】:

我想将此作为this one 的副本关闭,但该问题并未解决或询问有关使用序列而不是身份列的问题。此外,我想明确表示这适用于多行(如果您计划使用标量变量)。

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 中比更现代的语言更难,但请参阅 this answer,例如。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 2011-04-18
    • 2023-03-28
    相关资源
    最近更新 更多