无法将小数与varchar进行比较,但是real,float,int工作正常

时间:2014-10-28 21:17:55

标签: sql sql-server sql-server-2008 tsql

我在系统中有一个错误,我试图在下面的代码中简化:

declare @a decimal
select @a = 2.111

if  ''  !=  @a
select 'does not work'

当我将@定义为十进制时,它不起作用。我收到错误消息“将数据类型varchar转换为数字时出错”。但是,如果我将@a定义为float,money或real具有相同的值2.111,则可以使用

declare @a money
select @a = 2.111

if  ''  !=  @a
select 'works'

如果列是小数,有人可以提供解决方案吗?

2 个答案:

答案 0 :(得分:1)

我认为您需要测试IS NULL而不是空,因为它是十进制值

if @a IS NULL

这是用于转换值的SQL

declare @a double
select @a = 2.111

if  ''  !=  cast(@a as varchar(30))
select 'works'

答案 1 :(得分:0)

这在联机丛书中有记载。

http://technet.microsoft.com/en-us/library/aa226054(v=sql.80).aspx

  

当非数字char,nchar,varchar或nvarchar数据转换为int,float,numeric或decimal时,SQL Server会返回错误消息。当空字符串("")转换为数字或小数时,SQL Server也会返回错误。

这并没有真正回答"为什么"的问题,但至少它已被记录。