用于SQL Server 2016中的JSON

用于SQL Server 2016中的JSON,sql,json,sql-server,tsql,sql-server-2016,Sql,Json,Sql Server,Tsql,Sql Server 2016,在SQL Server 2016中,我是否可以使用FOR JSON以下面给定的格式返回JSON数据 { "draw": 1, "recordsTotal": 57, "recordsFiltered": 57, "data": [ { "first_name": "Airi", "last_name": "Satou", "position": "Accou

在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;
内部选择将创建一个对象数组并将其称为数据。外部选择将把所有这些放在一起

结果

[  
   {  
      "draw":1,
      "recordsTotal":100,
      "recordsFiltered":10,
      "data":[  
         {  
            "object_id":3,
            "name":"sysrscols"
         },
         {  
            "object_id":5,
            "name":"sysrowsets"
         },
         {  
            "object_id":6,
            "name":"sysclones"
         }
      ]
   }
]
暗示
您可能想了解,为了控制数组括号…

示例数据在这里很有用。查询和预期输出都很好,但我们不知道您的数据是什么样子的,所以当我们不知道A是什么时,从A->B中获取数据是很困难的。最好将示例数据作为+。请把你的问题包括在内。有关更多详细信息,您所需的输出与您的数据根本不匹配-产品字段与看起来像个人记录的字段不匹配。指定精确的输入和输出。不过,对于初学者来说,外部查询似乎缺少For JSON子句,该子句将draw、recordsTotal和recordsFiltered放在最终结果中。