2011-12-21 47 views
3

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

查询:

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

而我得到的错误:

消息306,级别16,状态1,行
文本,ntext和图像数据类型不能进行比较或排序,除非使用IS NULL或LIKE运算符。

我可以用得到我需要的结果吗?

+0

你为什么把它转换成'XML',以找出是否是'NULL'? – 2011-12-21 10:35:03

+1

@MartinSmith:他不是...... – 2011-12-21 10:36:41

+0

@ TomalakGeret'kal - 什么是他当时在做什么?如果该列为NULL,则无论如何,该转换的结果将为NULL,那么为什么将NULL作为字符串返回? – 2011-12-21 10:38:01

回答

5

CASE <expression> WHEN <value> THEN使用相等/等价的比较,但你需要一个IS NULL检查,因为NULL不是一个可比的数量和—的错误指示—图像不能“相比” 。

幸运的是,there is another constructCASE WHEN <test> THEN —带来平等伸到用户提供的参数,可以让你忽略它:

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

尝试以下操作:

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

更简洁的版本

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

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