【问题标题】:Check whether image column is null检查图像列是否为空
【发布时间】:2011-12-21 18:48:46
【问题描述】:

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

查询:

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

我得到的错误是:

消息 306,第 16 级,状态 1,第 1 行
text、ntext 和 image 数据类型不能进行比较或排序,除非使用 IS NULL 或 LIKE 运算符。

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

【问题讨论】:

  • 你为什么要把它转换成XML来看看是不是NULL
  • @TomalakGeret'kal - 那他在做什么?如果列是NULL,那么强制转换的结果将是NULL,那么为什么将NULL 作为字符串返回?
  • @Martin Smith - 如果它不为空,我会将其转换为 XML。
  • @Gisli - 为什么不直接投射而不进行测试?
  • 无意冒犯,只是帮助您在这里走上正轨而不会感到沮丧。

标签: sql sql-server tsql


【解决方案1】:

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 
    

    【讨论】:

      【解决方案3】:

      更简洁的版本

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

      尽管从 cmets 看来,您实际上并不需要这样做。

      【讨论】:

        猜你喜欢
        • 2014-01-10
        • 2018-04-28
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多