插入后获取新ID

spe*_*der 37 sql sql-server identity insert

我正在将一堆新行插入到表中,该表定义如下:

CREATE TABLE [sometable](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [someval] sometype NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

使用以下插入:

insert into sometable select somefield as someval from othertable
Run Code Online (Sandbox Code Playgroud)

当我完成后,我想知道所有新插入的行的ID.SCOPE_IDENTITY()仅返回插入的最后一行ID.

我怎样才能获得所有新ID?

一种让人想到的方法是从sometable和scope_identity()后插入中获取当前最大的标识,并使用这两个值从sometable中进行选择.例如:

declare @currentMaxId int;
select @currentMaxId=MAX(id) from sometable
insert into sometable select somefield as someval from othertable
select * from sometable where id>@currentMaxId and id<=SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)

有更好的模式吗?

Rob*_*Day 88

使用OUTPUT功能将所有INSERTED Id抓回到表中.

CREATE TABLE MyTable
(
    MyPK INT IDENTITY(1,1) NOT NULL,
    MyColumn NVARCHAR(1000)
)

DECLARE @myNewPKTable TABLE (myNewPK INT)

INSERT INTO 
    MyTable
(
    MyColumn
)
OUTPUT INSERTED.MyPK INTO @myNewPKTable
SELECT
    sysobjects.name
FROM
    sysobjects

SELECT * FROM @myNewPKTable
Run Code Online (Sandbox Code Playgroud)

  • @Robin - 我多年来一直在使用SQL Server,但是我从你的答案,OUTPUT和TABLE数据类型中学到了两件新东西.谢谢. (4认同)