如何更新空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
相关产品推荐
相关产品推荐

