繁体   English   中英

SQL Server 2016中的FOR JSON

[英]FOR JSON in SQL Server 2016

有什么办法可以在SQL Server 2016中使用FOR JSON以以下格式返回JSON数据?

 { 
     "draw": 1, 
     "recordsTotal": 57, 
     "recordsFiltered": 57, 
     "data": 
     [ 
         {
         "first_name": "Airi", 
         "last_name": "Satou", 
         "position": "Accountant",
         "office": "Tokyo", 
         "start_date": "28th Nov 08", 
         "salary": "$162,700" 
         } 
     ]
 }

尝试以下查询。 但未获得所需的输出-

SELECT
    1 AS draw
    ,100 AS recordsTotal
    ,10 AS recordsFiltered
,(SELECT 
    first_name
    ,last_name
    ,position
    ,office
    ,start_date
    ,salary
FROM Employees
FOR JSON PATH,ROOT('Employees'),INCLUDE_NULL_VALUES)

下面给出的查询可正确提供输出,但无法将列“ draw”,“ recordsFiltered”和“ totalRows”附加到JSON中-

SELECT 
        first_name
        ,last_name
        ,position
        ,office
        ,start_date
        ,salary
    FROM Employees
    FOR JSON PATH,ROOT('Employees'),INCLUDE_NULL_VALUES

这与sys.objects作为虚拟表源应该完全相同(顺便说一句:始终尝试创建一个有效的独立示例,方法是为表提供一些数据,或者使用每个人都可以使用的一些通用系统表)

SELECT
     1 AS draw
    ,100 AS recordsTotal
    ,10 AS recordsFiltered
,(
    SELECT TOP 3
     o.object_id
    ,o.name
    FROM sys.objects o
    FOR JSON PATH,INCLUDE_NULL_VALUES
  ) AS [data]
FOR JSON PATH;

内部SELECT将创建一个对象数组,并将其称为"data" 外部SELECT将所有这些放在一起。

结果

[  
   {  
      "draw":1,
      "recordsTotal":100,
      "recordsFiltered":10,
      "data":[  
         {  
            "object_id":3,
            "name":"sysrscols"
         },
         {  
            "object_id":5,
            "name":"sysrowsets"
         },
         {  
            "object_id":6,
            "name":"sysclones"
         }
      ]
   }
]

暗示

您可能想阅读有关WITHOUT_ARRAY_WRAPPER的信息 ,以控制数组括号...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM