You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NULLIF配合OPENJSON将读取到的空字符串替换为NULL?

报错原因

OPENJSON的WITH子句仅支持定义列名、列类型、对应JSON取值路径三个属性,不支持直接嵌套SQL函数运算,因此你直接在路径位置写NULLIF会触发语法错误。

补充说明:如果JSON中对应字段本身就是null值,OPENJSON默认会解析为SQL的NULL值,无需额外处理,我们只需要处理JSON中存储为空字符串""的场景。

可选实现方案

  • 方案1:SELECT阶段逐字段转换(推荐)
    兼容性最好、写法最简洁,直接在查询时做转换即可,示例代码如下:

    SELECT 
        js.Foo,
        NULLIF(js.Bar, N'') AS Bar -- 空字符串转NULL逻辑放在此处
    INTO
        #StringValues
    FROM 
        OPENJSON (@myJsonString, N'$') WITH (
             Foo nvarchar(50) N'$.Foo'
            ,Bar nvarchar(250) N'$.Bar' -- 此处仅指定对应JSON路径即可
        ) AS js
    
  • 方案2:先全量解析再批量更新
    适合需要解析的字段较多的场景,避免在SELECT阶段写大量重复逻辑:

    -- 第一步:先全量解析JSON到临时表
    SELECT 
        js.*
    INTO
        #StringValues
    FROM 
        OPENJSON (@myJsonString, N'$') WITH (
             Foo nvarchar(50) N'$.Foo'
            ,Bar nvarchar(250) N'$.Bar'
            -- 其余字段依次在此定义
        ) AS js
    
    -- 第二步:批量更新所有字符串类型字段的空字符串为NULL
    UPDATE #StringValues
    SET 
        Foo = NULLIF(Foo, N''),
        Bar = NULLIF(Bar, N'')
        -- 其余需要转换的字段依次在此补充
    

内容的提问来源于stack exchange,提问作者EvilDr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:06:04