Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么select SCOPE_IDENTITY()返回的是十进制而不是整数?_Sql Server_Primary Key_Scope Identity - Fatal编程技术网

Sql server 为什么select SCOPE_IDENTITY()返回的是十进制而不是整数?

Sql server 为什么select SCOPE_IDENTITY()返回的是十进制而不是整数?,sql-server,primary-key,scope-identity,Sql Server,Primary Key,Scope Identity,所以我有一个表,它的主键是一个identity列,所以它是一个整数。那么,为什么SCOPE_IDENTITY总是向我的C应用程序返回十进制值而不是int?这真的很烦人,因为十进制值在C中不会隐式转换为整数,这意味着我现在必须重写一堆东西,并且有很多辅助方法,因为我使用SQL Server和Postgres,而Postgres会为等效函数返回一个整数 为什么SCOPE_IDENTITY不只是返回一个普通整数?是否有人通常使用十进制/非标识值作为主键?在从查询或存储的过程返回之前,您不能强制转换它,

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


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

在从查询或存储的过程返回之前,您不能强制转换它,但您可能使用的是输出参数

如选择CASTSCOPE_IDENTITY作为INT作为最后一个_IDENTITY

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

返回值为小数38,0

强制转换、使用OUTPUT子句或分配给输出参数,而不是选择SCOPE_IDENTITY给客户端在SQL Server中,可以将IDENTITY属性分配给tinyint、smallint、int、bigint、decimalp、0或NUMEICP、0列。因此,SCOPE_IDENTITY函数必须返回可以包含上述所有内容的数据类型


正如前面的回答所说,在返回之前,只需在服务器上将其强制转换为int,然后ADO.NET将按照您的预期检测其类型。

尝试使用此选项,您将得到一个整数:

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

这并不是对所问问题的确切答案,但是根据上面的答案,在t-SQL-MS SQLServer中如何:


选择convertbigint,SCOPE_IDENTITY

SCOPE_IDENTITY是一个内置函数。。所以当执行类似ExecuteScalar'insert。。。;选择范围和标识;它将从该函数返回一个小数,而不是预期的int.@Earlz,因此将SQL更改为ExecuteScalar'insert。。。;选择CASTscope_标识为int';SCOPE_IDENTITY函数返回值为小数38,0在我的示例中,列的数据类型为int,但由于某种原因,SCOPE_IDENTITY返回System.Decimal。。。OUTPUT子句按预期返回一个整数,谢谢!