检查图像列是否为空。

3

我需要查找表中图像列是否为null。我一直在尝试使用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 数据类型。

那么我该使用什么方法来得到我需要的结果呢?


@TomalakGeret'kal - 那他在做什么呢?如果列为NULL,那么强制转换的结果将始终为NULL,为什么要返回一个字符串的NULL呢? - Martin Smith
@Martin Smith - 如果它不为空,我将把它转换为XML。 - Gisli
你的答案就在错误信息里,你应该查一下这个简单的提示!这种缺乏研究的问题通常会被投票降低。 - Stephen Turner
@MartinSmith:因为他想在那种情况下得到字符串“'null'”。你为什么要挑剔呢?你完全忽略了问题的本质。 - Lightness Races in Orbit
1
别误会,我只是想帮助你走上正确的道路,避免沮丧。 - Stephen Turner
显示剩余3条评论
3个回答

5
CASE <expression> WHEN <value> THEN 使用等式/相等比较,但需要使用IS NULL检查,因为NULL不是可比较的数量,正如错误所指出的那样,图像不能被“比较”。
幸运的是,还有另一种结构——CASE 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 

虽然从评论中看来,似乎你并不真的需要这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接