【发布时间】:2014-12-02 12:02:21
【问题描述】:
我遇到了一个 sql server 错误,不知道如何修复它。我在视图“产品”中获得了一个类型为 nvarchar(30) 的列“名称”,查询是在代码中动态生成的,因此无法完全改变它.
我收到“将 nvarchar 转换为数字数据类型的算术溢出错误”。对于以下查询:
select * FROM Products WHERE NAME=12.0
但是以下查询可以正常工作:
select * FROM Products WHERE NAME=112.0
我对这个错误感到很困惑,我知道我应该在数字周围加上引号,但只想知道为什么第二个查询有效,是否有任何设置可以使第一个查询有效?
更新:也
select * FROM Products WHERE NAME=cast('12.0' as decimal(4,2))
没用,但是
select * FROM Products WHERE NAME=cast('12.0' as decimal(5,2))
有效,有什么特别的原因吗?
非常感谢!
【问题讨论】:
-
如果
NAME是varchar(),则将其与varchar()进行比较,而不是数字:NAME = '12.0'。 -
@GordonLinoff,是的,这行得通,但为什么 112.0 可以正常工作,而 12.0 不行?
-
没有设置和所有。在您的动态查询句柄中使用 CAST 或 CONVERT 函数。 select * FROM #temp WHERE col1=cast (12.0 as nvarchar(30)) .....正如 Gordon 所说的 EQUAL to operator excepts 数据类型在符号的两侧应该相同。
标签: sql sql-server