检查image列是否为null

时间:2011-12-21 10:31:43

标签: sql sql-server tsql

我需要找出表中的图像列是否为空。我一直在尝试使用CASE,但我总是遇到错误。

查询:

SELECT  OutgoindDoc = CASE ReceivedData       
                        WHEN null THEN 'null'
                        ELSE CONVERT(xml,(CONVERT(varbinary(max),ReceivedData))) 
                      END
FROM    ib_IncomingData 

我得到的错误:

  

Msg 306,Level 16,State 1,Line 1
  除非使用IS NULL或LIKE运算符,否则无法比较或排序text,ntext和image数据类型。

我可以用什么来获得我需要的结果?

3 个答案:

答案 0 :(得分:5)

CASE <expression> WHEN <value> THEN使用相等/等效比较,但您需要进行IS NULL检查,因为NULL不是可比较的数量,而且 - 如错误所示 - 图像无法“比较”

幸运的是,there is another construct - CASE WHEN <test> THEN - 将等式带入用户提供的参数中,允许您省略它:

SELECT  OutgoindDoc = CASE
                        WHEN ReceivedData IS NULL THEN
                           'null'
                        ELSE
                           CONVERT(xml,(CONVERT(varbinary(max),ReceivedData))) 
                      END
FROM    ib_IncomingData

答案 1 :(得分:2)

尝试以下方法:

SELECT  OutgoindDoc = CASE       
                        WHEN ReceivedData IS NULL THEN 'null'
                        ELSE CONVERT(xml,(CONVERT(varbinary(max),ReceivedData))) 
                      END
FROM    ib_IncomingData 

答案 2 :(得分:1)

更简洁的版本

SELECT  OutgoindDoc = 
         ISNULL(CONVERT(xml,(CONVERT(varbinary(max),ReceivedData))) ,'null')
FROM    ib_IncomingData 

虽然从评论来看,无论如何你似乎并不需要这样做。