Azure Synapse SQL无服务器使用FOR JSON子查询时遇T-SQL错误
问题解答
错误原因及功能限制说明
这确实是Azure Synapse SQL无服务器池的功能限制。
Synapse SQL无服务器采用分布式数据处理架构,会将数据集拆分到多个节点并行处理。而你使用的嵌套子查询+FOR JSON PATH的写法,需要对主查询的每一行单独执行子查询并将结果序列化为JSON数组——这种逐行关联的JSON聚合逻辑,目前无法在无服务器的分布式处理模式下实现,因此触发了“该查询引用了分布式处理模式下不支持的对象”错误。
替代实现方案
可以通过预聚合关联数据,结合STRING_AGG构造JSON数组的方式达到类似效果,示例代码如下:
WITH ShiftResources AS ( SELECT resource, STRING_AGG('{"Id":' + CAST(id AS VARCHAR(20)) + '}', ',') AS FutureShiftsJson FROM [dbo].[shift] GROUP BY resource ) SELECT s.id AS Id, s.shifttype AS ShiftType, s.resource AS ResourceId, CONCAT('[', sr.FutureShiftsJson, ']') AS FutureShifts FROM [dbo].[shift] s JOIN ShiftResources sr ON s.resource = sr.resource FOR JSON PATH, ROOT('Shift')
内容的提问来源于stack exchange,提问作者Dean
相关产品推荐
相关产品推荐

