2013-12-13 52 views
1

在下面的查询事件中,尽管赋值为0,条件@ PARAM =''返回true。 任何人都可以解释为什么sql服务器将0视为''以及如何处理这种情况?sql server NULL case handing

declare @param int 
set @PARAM=0 
select @PARAM 
SELECT @PARAM=CASE WHEN @PARAM='' THEN NULL ELSE @PARAM END 
select @PARAM 
+5

为什么比较'integer'参数为'varchar' ?? –

+0

@ConradFrix它也给你同样的o/p。清除第一个选择参数并检查。 –

+1

检出http://stackoverflow.com/questions/4147215/how-int-database-field-gets-compared-to-varchar-type然后尝试'选择convert(int,'')' – Brad

回答

2

SQL Server隐式地将空字符串转换为0,所以这就是为什么你会得到这个结果。

看起来好像这个问题,也提出了在这里:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=155339

我从这个论坛robvolk的响应引述如下:

“然后使用显式类型转换为罗素你不能控制服务器的隐式转换机制,你只能解决它。“

+0

感谢您的详细解释和有用的链接。 –

-1

你不能检查一个字符串整数值。如下所示更改查询。然后它开始给出错误。 “将varchar值'Test'转换为数据类型int时转换失败。”

**declare @param int 
set @PARAM=0 
select @PARAM 
SELECT @PARAM = CASE WHEN @PARAM='' THEN 'Test' ELSE @PARAM END 
select @PARAM** 
+0

虽然这个问题没有做到。空字符串转换为“0”。所以他们正在做'SELECT CASE',当0 =''THEN NULL ELSE 0 END'时,它不会导致运行时错误并进入'CASE'的第一个分支。 –