• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SqlServer自增列的问题

mysql 搞代码 4年前 (2022-01-09) 23次浏览 已收录 0个评论

在SQL SER本文来源gaodai$ma#com搞$代*码*网VER中可以使用三种方法来获取系统生成的标识值: @@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 这三个函数都返回最后生成的标识值。但是,它们在定义”最后”的作用域和会话上不同。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识

在SQL SERVER中可以使用三种方法来获取系统生成的标识值:
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 这三个函数都返回最后生成的标识值。但是,它们在定义”最后”的作用域和会话上不同。

  • @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
  • SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。
  • IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。

@@IDENTITY

返回最后插入的标识值。

语法
@@IDENTITY

返回类型
numeric

注释
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则@@IDENTITY 值不会还原为以前的设置。

如果在你进行insert操作的时间和检查@@IDENTITY的时间之间有另一个insert操作被执行,@@IDENTITY返回的不是系统为你的insert所生成的标识值,而是它为最近的一个insert操作所生成的标识值。

SCOPE_IDENTITY

返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

……

更多 http://blog.gaodaima.com/vince6799/archive/2006/05/14/727925.aspx


根据引用的解释看,似乎 @@Identity 的返回类型是固定的,而对于 c# 大概就是 Decimal 了。你换用 SCOPE_IDENTITY 之类的试试呢,看解释它似乎是忠于原类型的。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SqlServer自增列的问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址