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
相关产品推荐
相关产品推荐

