在sql server中将查询输出转换为json格式
我想将下面的查询输出显示为JSON格式(必需的输出格式) 我想显示以下我正在使用的sql server 2016格式在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
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)