在sql server中,我创建了一个列id为int的表,带有identity,第二个是name varchar,我创建了一个proc用于插入,我写入语句,插入记录后我希望插入的记录id为我使用@@ identity它正在工作但是,奇怪的是@@ identity显示更多的行,但是在表中那些记录并不存在更少的recrords。我的过程是
alter proc usp_test123
as begin
set nocount on;
insert into test123 values('sasi')
select @@IDENTITY
end
答案 0 :(得分:4)
你的意思是返回的身份可能是10,而表中只有8行吗?
identity
列不保证是连续的。如果删除行,或者回滚执行插入的事务,则系列中将缺少数字。
作为旁注,您应该使用SCOPE_IDENTITY()
代替@@IDENTITY
。 @@IDENTITY
返回插入的最新行的id。如果您插入的表上有触发器,您将获得触发器插入的最新行。 SCOPE_IDENTITY()
获取在相同代码范围内生成的最新标识。