为什么选择SCOPE_IDENTITY()返回小数而不是整数?

Ear*_*rlz 84 sql-server primary-key scope-identity

所以我有一个以标识列为主键的表,所以它是一个整数.那么,为什么SCOPE_IDENTITY()总是向我的C#应用​​程序返回一个十进制值而不是一个int?这真的很烦人,因为十进制值不会隐式转换为C#中的整数,这意味着我现在必须重写一堆东西,并且有很多辅助方法,因为我使用SQL Server和Postgres,Postgres确实返回一个整数等效功能..

为什么SCOPE_IDENTITY()不只返回一个普通的整数?是否有人通常使用十进制/非身份值作为主键?

Chr*_*ter 99

在SQL Server中,IDENTITY属性可以被分配到tinyint,smallint,int,bigint,decimal(p, 0),或numeric(p, 0)列.因此,该SCOPE_IDENTITY函数必须返回可以包含上述所有内容的数据类型.

正如之前的答案所说,只需int在返回之前将其转发到服务器上,然后ADO.NET将按预期检测其类型.

  • SCOPE_IDENTITY函数的返回值为*** decimal(38,0)*** (2认同)

Cad*_*oux 32

难道你不能在从查询或存储过程中返回它之前抛出它(无论如何,SP总是返回int,但是你可能正在使用输出参数)?

喜欢 SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY

为什么会这样呢?可能更灵活,处理更大的数字.


KM.*_*KM. 5

尝试使用这个,你会得到一个整数:

ExecuteScalar('insert...; select CONVERT(int,scope_identity())');
Run Code Online (Sandbox Code Playgroud)