如何获取特定表格的@@ IDENTITY?
我一直在做
select * from myTable
因为我假设这设置范围,从SSMS中的同一窗口SQL查询窗口然后运行
select @@IDENTITY as identt
它将identt作为null返回,这是不可能的,因为myTable已经有许多entrie ..
我希望它能返回下一个可用的ID整数。
myTable的ID列设置为主键并自动增量。
答案 0 :(得分:9)
您可以使用IDENT_CURRENT
IDENT_CURRENT( 'table_name' )
请注意,IDENT_CURRENT会在任何会话和任何范围中返回表的最后一个标识值。这意味着,如果在您的标识值之后插入了另一个标识值,那么您将无法检索您插入的标识值。
答案 1 :(得分:6)
您只能在插入后真正使用SELECT @@IDENTITY
- 最后一次插入具有IDENTITY列的表是您将获得的值。
你不能将它“限制”到一个表格 - @@ IDENTITY中的值 - 顺便说一下,我强烈建议使用SCOPE_IDENTITY()来强烈推荐! - 是已设置的任何IDENTITY列的最后一个值。
@@ IDENTITY的问题在于它会报告插入到任何表格中的最后一个IDENTITY值 - 如果您对数据表的INSERT将导致例如将条目写入Audit表并且Audit表具有IDENTITY字段的触发器,您将获得IDENTITY值 - 而不是插入表中的值。 SCOPE_IDENTITY()解决了这个问题。
答案 2 :(得分:2)
IDENT_CURRENT做你想要的。但不要。
这是对marc_s'回答
的补充答案 3 :(得分:1)
我从来不知道以这种方式使用@@ IDENTITY,我只是用它来访问新插入记录的ID。
答案 4 :(得分:0)
这是对的。 @@ IDENTITY不能以您认为的方式使用。它只能在INSERT进入表后使用。让我们考虑一下这个场景:
您有两个表:Order(主键:OrderID),OrderDetails(外键:OrderID)
你表演 插入订单 VALUES( '枕头') - 请注意,Value中未提及OrderId,因为它是自动编号(主键)
现在您想要在OrderDetail中执行插入操作。但是,在插入“Pillows”记录之前,您并不总是记得Order表中有多少条记录,因此您不记得插入Order表的最后一条PrimaryKey是什么。您可以,但即便如此,当您插入OrderDetail表时,您也不希望特别提及插入(假设OrderID为1)。
因此,你的OderDetail插件有点像: INSERT INTO OrderDetail VALUES(@@ IDENTITY,'Soft Pillows')
希望这能解释@@ IDENTITY的用户。