首页 > 解决方案 > WHEN 语句中的 NULL 检查在 SQL Server 中不起作用

问题描述

我希望以下代码应打印“无转换”,但会收到以下错误“将数据类型 varchar 转换为数字时出错。” 当语句TRY_PARSE内部WHEN返回 null 时,该THEN块应该执行吗?

DECLARE @VALUE varchar(20) = 'NA'

SELECT
    CASE
       WHEN TRY_PARSE(@VALUE AS DECIMAL) IS NULL
          THEN 'No Conversion'
          ELSE (CONVERT(DECIMAL(10, 3), @VALUE, 0))
    END  

标签: sqlsql-server

解决方案


表达式的所有分支都CASE需要具有相同的类型。鉴于错误消息是文本,您还应该将强制转换的十进制值包含为文本,如下所示:

SELECT CASE WHEN TRY_PARSE(@VALUE AS DECIMAL) IS NULL
            THEN 'No Conversion'
            ELSE CONVERT(varchar(max), CONVERT(decimal(10,3), @VALUE, 0)) END

推荐阅读