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

TSQL子查询中如何强制返回值为NULL的OptionId列?

解决TSQL子查询FOR JSON时强制返回NULL列的问题

在你的代码中,使用FOR JSON AUTO时,SQL Server默认会忽略值全为NULL的列,所以即使你定义了OptionId = NULL,最终JSON结果里也不会出现这个字段。要强制返回该列,可采用以下两种方案:

方法1:改用FOR JSON PATH

FOR JSON PATH模式会保留SELECT列表中所有定义的列,无论值是否为NULL,是最直接的解决方式:

WHEN qt.Id = 10 THEN
     (
     SELECT 
         OptionId = NULL
         ,AnswerString = NULL
         ,san.AnswerNumber as AnswerBinary
         ,Total = COUNT(*) 
     FROM dbo.SurveyAnswers AS san
     WHERE san.QuestionId = sq.Id
     GROUP BY san.AnswerNumber
     FOR JSON PATH  -- 替换原AUTO为PATH
     )

方法2:为NULL值指定明确数据类型(保留AUTO模式)

如果必须使用FOR JSON AUTO,可以通过CAST或CONVERT给NULL值指定对应的数据类型,让SQL Server识别到该列的存在并保留:

WHEN qt.Id = 10 THEN
     (
     SELECT 
         OptionId = CAST(NULL AS INT)  -- 替换为OptionId实际的数据类型
         ,AnswerString = CAST(NULL AS NVARCHAR(MAX))  -- 替换为AnswerString实际的数据类型
         ,san.AnswerNumber as AnswerBinary
         ,Total = COUNT(*) 
     FROM dbo.SurveyAnswers AS san
     WHERE san.QuestionId = sq.Id
     GROUP BY san.AnswerNumber
     FOR JSON AUTO
     )

注意:代码中的INT和NVARCHAR(MAX)需要替换为对应字段在表中实际定义的数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:40:54