我在系统中有一个错误,我试图在下面的代码中简化:
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'
如果列是小数,有人可以提供解决方案吗?
答案 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也会返回错误。
这并没有真正回答"为什么"的问题,但至少它已被记录。