在sql server中将查询输出转换为json格式

在sql server中将查询输出转换为json格式,json,sql-server,Json,Sql Server,我想将下面的查询输出显示为JSON格式(必需的输出格式) 我想显示以下我正在使用的sql server 2016格式 Required output Format: [{"ApplicationID":1,"Roles":[1,5]},{"ApplicationID":3,"Roles":[5]}] 如果您使用的是SQL Server 2016+,则可以对JSON使用语句 SELECT ApplicationID ApplicationID, Roleid Roles FRO

我想将下面的查询输出显示为JSON格式(必需的输出格式)

我想显示以下我正在使用的sql server 2016格式

Required output Format:
[{"ApplicationID":1,"Roles":[1,5]},{"ApplicationID":3,"Roles":[5]}]

如果您使用的是SQL Server 2016+,则可以对JSON使用
语句

SELECT
    ApplicationID ApplicationID,
    Roleid Roles 
FROM UserRoles 
WHERE userid = 11 AND applicationid IS NOT NULL
FOR JSON AUTO
看看这个:

我记得:

select ApplicationID ApplicationID ,Roleid Roles from UserRoles where userid=11 and applicationid is not null 
FOR JSON PATH, ROOT("UserRoles")

通过纯T-SQL-JSON-support,您可以得到以下最接近的结果:

DECLARE @tbl TABLE(ApplicationID INT,  Roles INT);
INSERT INTO @tbl VALUES
 (1,1)
,(1,5)
,(3,5);

SELECT t.ApplicationID
      ,Roles.Roles AS Roles  
FROM @tbl t
INNER JOIN @tbl Roles ON Roles.ApplicationID=t.ApplicationID
GROUP BY t.ApplicationID,Roles.Roles
FOR JSON AUTO;
结果

[{"ApplicationID":1
 ,"Roles":[{"Roles":1}
          ,{"Roles":5}]
 }
,{"ApplicationID":3
 ,"Roles":[{"Roles":5}]}
]
[{"ApplicationID":1,"Roles":[1,5]}
,{"ApplicationID":3,"Roles":[5]}]
AUTO
模式下,引擎将“看到”连接并将其打包到对象数组中

遗憾的是,JSON的
不支持裸数组(
[1,2,3]
)。您将始终获得对象数组,如
[{Prop:Val},{Prop:Val},{Prop:Val}]

但是您可以通过相关子查询和一些字符串聚合来解决这个问题(我们需要
JSON\u query()
以避免在数组中使用引号):

结果

[{"ApplicationID":1
 ,"Roles":[{"Roles":1}
          ,{"Roles":5}]
 }
,{"ApplicationID":3
 ,"Roles":[{"Roles":5}]}
]
[{"ApplicationID":1,"Roles":[1,5]}
,{"ApplicationID":3,"Roles":[5]}]
您能使用
STRING\u AGG()
(v2017+)吗?在这种情况下,可以简化子选择

上面的查询给出了输出[{“ApplicationID”:1,“Roles”:1},{“ApplicationID”:1,“Roles”:5},{“ApplicationID”:3,“Roles”:5}]。如果应用程序id存在不止一次(例如“ApplicationID:1”,它不应该出现两次(没有重复)。所需的输出格式:[{“ApplicationID”:1,“Roles”:[1,5]},{“ApplicationID”:3,“Roles”:[5]}]所需的输出格式:[{“ApplicationID”:1,“Roles”:[1,5]},{“ApplicationID”:3,“Roles”:[5]}]创建表用户角色(ApplicationID int,Roleid int)插入用户角色值(1,1);插入用户角色值(1,5)插入用户角色值(3,5)