在下面的查询事件中,尽管赋值为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
在下面的查询事件中,尽管赋值为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
SQL Server隐式地将空字符串转换为0,所以这就是为什么你会得到这个结果。
看起来好像这个问题,也提出了在这里:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=155339
我从这个论坛robvolk的响应引述如下:
“然后使用显式类型转换为罗素你不能控制服务器的隐式转换机制,你只能解决它。“
感谢您的详细解释和有用的链接。 –
你不能检查一个字符串整数值。如下所示更改查询。然后它开始给出错误。 “将varchar值'Test'转换为数据类型int时转换失败。”
**declare @param int
set @PARAM=0
select @PARAM
SELECT @PARAM = CASE WHEN @PARAM='' THEN 'Test' ELSE @PARAM END
select @PARAM**
虽然这个问题没有做到。空字符串转换为“0”。所以他们正在做'SELECT CASE',当0 =''THEN NULL ELSE 0 END'时,它不会导致运行时错误并进入'CASE'的第一个分支。 –
为什么比较'integer'参数为'varchar' ?? –
@ConradFrix它也给你同样的o/p。清除第一个选择参数并检查。 –
检出http://stackoverflow.com/questions/4147215/how-int-database-field-gets-compared-to-varchar-type然后尝试'选择convert(int,'')' – Brad