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)
归档时间: |
|
查看次数: |
25636 次 |
最近记录: |