2014-10-28 17 views
0

我在系统中的错误,我尝试下面的代码,以简化:无法比拟小数为varchar,但真正的,浮动,诠释工作正常

declare @a decimal 
select @a = 2.111 

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

当我确定@因为它不是一个小数工作。我收到一条错误信息“Error conversion data type varchar to numeric”。但是如果我定义@a为float,金钱或实际使用相同的值2.111它的工作原理

declare @a money 
select @a = 2.111 

if '' != @a 
select 'works' 

有人能提供一个解决方案,如果该列是小数?

回答

1

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

if @a IS NULL 

这里是投

declare @a double 
select @a = 2.111 

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

这工作兄弟..谢谢..我会让它作为答案,但我想知道为什么真正的,浮动和金钱工作与相同的十进制值和小数本身不起作用? – 2014-10-28 21:26:40

0

这在丛书中上线值的sql 。当非数字字符,NCHAR varchar或nvarchar数据被转换为整数,浮点,数字,或小数

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

SQL Server返回一个错误消息。当空字符串(“”)被转换为数字或小数时,SQL Server也会返回错误。

这并没有真正回答“为什么”的问题,但至少它被记录在案。

+0

感谢@Mastros – 2014-10-29 14:15:53

相关问题