【发布时间】:2021-07-22 04:24:16
【问题描述】:
我有两个 SQL Server 表 ApplicationRoles 和 commonformsschema。基于SchemaId 列在两个表之间应用连接。
但是FOR JSON PATH 列名称为roles 结果出错了。
这里是选择查询:
SELECT
fs1.SchemaId, JSON_QUERY(ar.newJson) as roles
FROM
commonformsschema fs1
JOIN
ApplicationRoles ar1 on ar1.SchemaId = fs1.SchemaId
CROSS APPLY
(SELECT
(SELECT
RoleName AS [role],
[create] AS [permissions.create],
[read] AS [permissions.read],
[update] AS [permissions.update],
[delete] AS [permissions.delete]
FROM
ApplicationRoles ar
WHERE
fs1.SchemaId = ar1.SchemaId
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER) AS newJson) ar
WHERE
fs1.Tenant IN ('test', 'All')
AND ar1.RoleName IN ('Project Manager', 'Read')
完整表格详情请输入db fiddler。
当前结果:
| SchemaId | roles |
|---|---|
| 7a9a2521-45fb-4c9d-b7d9-e41927118119 | {"role":"Senior Construction Manager","permissions":{"create":true,"read":true,"update":true,"delete":true}} |
| ca5d8707-fee8-4a5b-ad61-813785e32575 | {"role":"Senior Construction Manager","permissions":{"create":true,"read":true,"update":true,"delete":true}} |
预期结果:
| SchemaId | roles |
|---|---|
| 7a9a2521-45fb-4c9d-b7d9-e41927118119 | {"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} |
| ca5d8707-fee8-4a5b-ad61-813785e32575 | {"role":"Project Manager","permissions":{"create":true,"read":true,"update":false,"delete":true}} |
如何解决这个问题?请任何帮助。如果需要任何其他详细信息,请告诉我。
提前致谢。
【问题讨论】:
标签: sql json sql-server tsql