2011-12-21 50 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 

雖然從評論無論如何,你似乎並不需要這樣做。