相关疑难解决方法(0)

为什么`SELECT @@IDENTITY` 返回一个小数?

我正在使用Dapper对来自 ASP.NET MVC 3 (.NET 4.0) 应用程序的 SQL Server 2008 R2 Express 实例执行以下查询。

INSERT INTO Customers (
         Type, Name, Address, ContactName, 
         ContactNumber, ContactEmail, Supplier)
VALUES (
         @Type, @Name, @Address, @ContactName, 
         @ContactNumber, @ContactEmail, @Supplier)

SELECT @@IDENTITY
Run Code Online (Sandbox Code Playgroud)

对 的调用connection.Query<int>(sql, ...)正在引发无效的强制转换异常。我已经调试了它,它是在 Dapper 调用GetValue返回的SqlDataReader.

的返回类型GetValueObject,在调试器中检查它显示它是一个装箱十进制。

如果我将选择更改为SELECT CAST(@@IDENTITY as int),则 GetValue 的返回是一个装箱的 int 并且不会引发异常。

Id 列绝对是 int 类型;为什么会SELECT @@IDENTITY返回一个小数?

一些附加信息:

  • 数据库是全新的。
  • 客户表是我添加到其中的唯一对象。数据库中没有其他(用户)表、视图、触发器或存储过程。
  • 数据库中有 10 行,Id 为 1,2,3,4,5,6,7,8,9,10(即该列不超出 int …

sql-server ado.net t-sql

24
推荐指数
3
解决办法
1万
查看次数

什么是 SQL Server“Denali”?什么是新的?

我在 MSDN 的下拉列表中找到了一个名为SQL Server "Denali"的新标题,但我没有找到太多关于它的信息:

是否有人对此版本中的新功能或重大错误修复有更详细的信息?我希望有人使用过或测试过它。

新功能

features sql-server-2012

20
推荐指数
6
解决办法
6257
查看次数

为什么 TSQL 为 POWER(2.,64.) 返回错误的值?

select POWER(2.,64.)返回18446744073709552000而不是18446744073709551616. 它似乎只有 16 位精度(四舍五入第 17 位)。

即使使精度明确,select power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0)))它仍然返回四舍五入的结果。

这似乎是一个非常基本的操作,因为它可以像这样以 16 位精度任意剥离。它可以正确计算的最高值仅为POWER(2.,56.),失败为POWER(2.,57.)。这里发生了什么?

真正可怕的是select 2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.;实际上返回了正确的值。简洁到此为止。

sql-server azure-sql-database

14
推荐指数
2
解决办法
1717
查看次数

为什么 10^37 / 1 会抛出算术溢出错误?

继续我最近玩大数字的趋势,我最近将一个错误归结为以下代码:

DECLARE @big_number DECIMAL(38,0) = '1' + REPLICATE(0, 37);

PRINT @big_number + 1;
PRINT @big_number - 1;
PRINT @big_number * 1;
PRINT @big_number / 1;
Run Code Online (Sandbox Code Playgroud)

我为此代码得到的输出是:

10000000000000000000000000000000000001
9999999999999999999999999999999999999
10000000000000000000000000000000000000
Msg 8115, Level 16, State 2, Line 6
Arithmetic overflow error converting expression to data type numeric.
Run Code Online (Sandbox Code Playgroud)

什么?

为什么前 3 个操作有效,而最后一个无效?如果@big_number显然可以存储 的输出,怎么会出现算术溢出错误@big_number / 1

sql-server-2008 sql-server datatypes

11
推荐指数
1
解决办法
1324
查看次数