您好,欢迎访问一九零五行业门户网

SqlServer自增列的问题

在sql server中可以使用三种方法来获取系统生成的标识值: @@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.csdn.net/vince6799/archive/2006/05/14/727925.aspx
根据引用的解释看,似乎 @@identity 的返回类型是固定的,而对于 c# 大概就是 decimal 了。你换用 scope_identity 之类的试试呢,看解释它似乎是忠于原类型的。
其它类似信息

推荐信息