IDENTITY插入行的最佳方法是什么?
我知道@@IDENTITY和IDENT_CURRENT和SCOPE_IDENTITY,但不明白连接到每个利弊.
有人可以解释一下这些差异,以及何时应该使用它们?
我试图在INSERT声明后得到一个键值.示例:我有一个包含属性name和id的表.id是生成的值.
INSERT INTO table (name) VALUES('bob');
Run Code Online (Sandbox Code Playgroud)
现在我想在同一步骤中恢复身份.这是怎么做到的?
我们正在使用Microsoft SQL Server 2008.
我有一个带有复合主键的表,安排如下:
CREATE TABLE [dbo].[mytable]
(
[some_id] [smallint] NOT NULL,
[order_seq] [smallint] NOT NULL,
-- etc...
)
Run Code Online (Sandbox Code Playgroud)
这两个列都是主键的一部分(它实际上是真实表上的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
Run Code Online (Sandbox Code Playgroud)
我需要知道如何设置@newSeq.我想避免在插入后运行select查询,因为我不想遇到并发问题 - 我被禁止锁定表或使用事务(不要问).
据我所知,我不能使用,SCOPE_IDENTITY()因为没有列是一个标识.我怎样才能newSeq正确设置?
我想在Sqlserver中获取新插入记录的Id.我已经检查了Scope_Identity()但据说这会返回自动增量列的值.我用于Id的专栏是Guid.插入后我想要这个Guid列值.应该如何实现?或者我必须编写一个自定义繁琐的函数来获取新插入记录的Id.