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

时间:2010-04-08 16:20:53

标签: sql-server primary-key scope-identity

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

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

5 个答案:

答案 0 :(得分:96)

在SQL Server中,IDENTITY属性可以分配给tinyintsmallintintbigintdecimal(p, 0)或{ {1}}列。因此,numeric(p, 0)函数必须返回一个可以包含上述所有内容的数据类型。

正如之前的答案所说的那样,只需将它转发到服务器上的SCOPE_IDENTITY,然后再返回它,然后ADO.NET会检测到它的类型。

答案 1 :(得分:30)

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

SELECT CAST(SCOPE_IDENTITY() AS INT) AS LAST_IDENTITY

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

答案 2 :(得分:4)

Scope identity返回值为十进制(38,0)

CAST它,使用OUTPUT子句,或者为客户端分配输出参数而不是SELECT SCOPE_IDENTITY()

答案 3 :(得分:3)

尝试使用此功能,您将获得一个整数:

ExecuteScalar('insert...; select CONVERT(int,scope_identity())');

答案 4 :(得分:0)

这不是所问问题的确切答案,但就上述答案而言,该怎么回事(在T-SQL-MS SQLServer中):

选择convert(bigint,SCOPE_IDENTITY())