SQL Server:插入后检索复合主键

时间:2014-06-03 21:12:18

标签: sql sql-server sql-server-2008

我需要在插入新行后从表中检索复合主键。

这是表格设计:

enter image description here

这是我的查询

Set Nocount on

insert into AE_Movimenta (NumContrato, ANoMov, NumMov, CodTpDoc, CodNatOper, CodCondPag, TipoMov, CodTab, CodTpEntrega, Tipo, DtMov, CodUsu, CodSetor, DtDoc, NumDoc, Serie, IdNfe, NumIP, DtSistema, CodSistema) 
values (22, YEAR(GETDATE()), 15, 1,1,0,'S',0,1,'E',GETDATE(), 4, 1, GETDATE(), '', '','', '', GETDATE(), 1)

select NumMov = @@identity

set nocount off

我得到NULL

enter image description here

在此示例中,NumMov主键列是手动设置的,但我需要在插入后动态获取此值。

2 个答案:

答案 0 :(得分:3)

您有一个复合键,因此很可能没有要检索的标识值..

您需要使用的是OUTPUT子句。在线查找Books中的语法。

答案 1 :(得分:3)

@@IDENTITY检索最后插入的标识值(受某些范围限制的条件限制)。这清楚地记录了here。因此,如果没有将列定义为identity,则不会返回任何内容。这与主键无关,除了使用标识列作为主键这一事实是好的。

如果您想了解有关插入(或更新或删除)的最后记录的信息,请学习使用output子句。这是获取实际在给定语句中插入(或更新或删除)的数据的最佳方法。

Hereoutput子句的文档。