2013-02-08 71 views
0

我具有导致我空或零以下查询返回:算术溢出错误转换nvarchar的数据类型数值时该值为0

SELECT TOP 1 ISNULL([jul-12],0) FROM Table_tmp 
WHERE ID = 123250838 

但是当我添加条件,询问是否列值是零点的原因溢出错误:

SELECT TOP 1 ISNULL([jul-12],0) FROM Table_tmp 
WHERE ID = 123250838 
AND [jul-12] <> 0 

的列的数据类型是FLOAT

exec sp_help 'Table_tmp' 
jun-12 float no 8 53  NULL yes (n/a) (n/a) NULL 

我试图与函数转换()和CAST(),但具有相同的结果。

但当柱[07月12]的值是非零,它的工作原理没有错误。为什么会发生?

+0

你可以建立一个样品小提琴解决了这个问题 - 没有经历同样的问题在我的结尾。这可以让你开始:http://sqlfiddle.com/#!3/5029c/1 – sgeddes 2013-02-08 15:52:07

+0

该临时表通过一个Excel文件的转储 – csotelo 2013-02-08 16:00:37

回答

1

尝试像下面...可能是它会帮助你...

SELECT TOP 1 ISNULL([jul-12],0) FROM Table_tmp 
WHERE Str([jul-12], 25, 5) <> '0' 
+0

谢谢,你的回答帮我 – csotelo 2013-02-08 16:55:56

0

这是因为CAST()规范。结果数据类型将是如在第二参数。为了避免这种情况,你可以使用COALESCE函数,确定由第一个参数结果数据类型,也有利于这一功能是它的ANSI标准(而不是ISNULL)。 你可以看看这里这个功能: COALESCE MSDN 使用你的情况是:COALESCE(jul-12],0) - 这将返回第一个不为空值。

0

我只是碰到这个问题跑,并通过在列抛出“IS NOT NULL”条款到“WHERE”,我用CAST()

相关问题