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

SQL Server 2016中能否同时返回JSON与非JSON数据?附示例

在SQL Server 2016中同时返回JSON与非JSON数据的方法

当然可以!在SQL Server 2016里,你完全能轻松实现同时返回普通格式列和JSON格式列的需求,甚至能把部分关联数据打包成JSON片段返回。下面给你几个贴合需求的实用示例:

1. 手动构造混合结果(匹配你给出的示例格式)

如果你需要直接生成类似Column1 | Column2(1 | [{"something":"value", "column2": "value2"}])的结果,可以用子查询结合FOR JSON PATH来生成JSON列:

SELECT 
    Column1 = 1, -- 非JSON格式的普通列
    Column2 = (
        -- 子查询生成JSON数组,和你的示例格式一致
        SELECT 
            'value' AS something,
            'value2' AS column2
        FOR JSON PATH
    )

执行后,Column2会返回标准的JSON数组字符串,而Column1是普通数值类型。

2. 从现有表数据生成混合结果

如果你的数据来自实际业务表,比如要返回订单ID(普通列)和该订单的所有明细(JSON数组列),可以这么写:

SELECT 
    o.OrderID, -- 普通订单ID列
    OrderDetails = (
        -- 关联查询生成该订单的明细JSON数组
        SELECT 
            od.ProductID,
            od.Quantity,
            od.UnitPrice
        FROM OrderDetails od
        WHERE od.OrderID = o.OrderID
        FOR JSON PATH
    )
FROM Orders o
WHERE o.OrderID = 10248; -- 筛选指定订单

这里OrderID是普通数值列,OrderDetails则是包含该订单所有明细数据的JSON数组,非常适合需要在一条结果里关联展示主数据和子数据的场景。

3. 生成单个JSON对象而非数组

如果你需要Column2是单个JSON对象(而非数组),可以在FOR JSON PATH后面加上WITHOUT_ARRAY_WRAPPER选项:

SELECT 
    Column1 = 1,
    Column2 = (
        SELECT 
            'value' AS something,
            'value2' AS column2
        FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
    )

此时Column2的结果会是{"something":"value","column2":"value2"},同样是合法的JSON格式。

注意事项

  • SQL Server会自动处理JSON的引号转义和格式合法性,避免手动拼接字符串容易出现的语法错误;
  • 生成的JSON列类型为NVARCHAR(max),你可以用ISJSON(Column2)函数验证其是否为有效的JSON;
  • FOR JSON语法在SQL Server 2016及以上版本支持,正好符合你的环境要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:40