我将主键设置为自动递增。
我正在执行多个查询,并且需要检索该主键值以用作另一个表(IsIdentity = TRUE
)中的外键。
在执行insert查询时,有没有什么很好的方法来取回主键值?现在,我正在重新查询,并在该列中获得最高值,这似乎真的很麻烦。
有什么建议吗?
发布于 2009-09-01 03:59:36
insert into YourTable values (...)
使用scope_identity()获取新的PK
select scope_identity()
发布于 2009-09-01 04:14:28
如果使用的是SQL Server2005或更高版本,则可以使用OUTPUT子句。
create table T(
pk int identity primary key,
dat varchar(20)
);
go
insert into T
output inserted.pk
values ('new item');
go
drop table T;
输出既可以定向到表,也可以定向到客户端。例如:
create table T(
pk int identity primary key,
dat varchar(20)
);
create table U(
i int identity(1001,1) primary key,
T_pk int not null,
d datetime
);
go
insert into T
output inserted.pk, getdate()
into U(T_pk,d)
values ('new item'), ('newer item');
go
select * from T;
select * from U;
go
drop table T, U;
从SQL Server2008开始,您可以使用"composable DML“来实现更多可能性。
发布于 2013-06-01 04:03:33
INSERT INTO YourTable (1, 2, etc.)
OUTPUT inserted.yourIDcolumn
VALUES (value1, value2, value...)
注意:这是针对MS SQL 2005及更高版本的
https://stackoverflow.com/questions/1360453
复制相似问题