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

如何更新空JSON列?NULL场景下的出生日期更新问题

解决JSON字段为NULL时的出生日期更新问题

问题核心在于JSON_MODIFY函数仅能操作有效的JSON对象,当AdditionalFields字段为NULL时,无法直接执行修改操作。以下是两种可行的解决方案:

方案一:统一处理NULL与非NULL场景

通过ISNULL函数将NULL值转换为空JSON对象'{}',让JSON_MODIFY可以统一处理所有情况:

BEGIN TRY
    BEGIN TRANSACTION

    UPDATE [dbo].[User]
    SET AdditionalFields = JSON_MODIFY(ISNULL(AdditionalFields, '{}'), '$.dateOfBirth', '1992-12-03')
    WHERE Id = '1'

    COMMIT TRANSACTION
    PRINT 'Transaction Committed'
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
    PRINT ERROR_MESSAGE()
    PRINT 'Transaction Rolled-Back'
END CATCH

方案二:分场景显式处理

使用CASE语句区分字段状态,NULL时直接插入完整JSON字符串,非NULL时执行修改:

BEGIN TRY
    BEGIN TRANSACTION

    UPDATE [dbo].[User]
    SET AdditionalFields = 
        CASE
            WHEN AdditionalFields IS NULL THEN '{"dateOfBirth": "1992-12-03"}'
            ELSE JSON_MODIFY(AdditionalFields, '$.dateOfBirth', '1992-12-03')
        END
    WHERE Id = '1'

    COMMIT TRANSACTION
    PRINT 'Transaction Committed'
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
    PRINT ERROR_MESSAGE()
    PRINT 'Transaction Rolled-Back'
END CATCH

注意事项

  • 确保JSON键名的大小写与业务需求一致(示例中使用dateOfBirth,若需要DateOfBirth需对应修改)。
  • 两种方案都能保证事务的原子性,出错时自动回滚。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:33:20