You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Synapse专用SQL池执行脚本遇FOR语法解析错误求助

解决方案:Azure Synapse专用SQL池替代FOR JSON AUTO语法

错误原因

Azure Synapse专用SQL池(Dedicated SQL Pool)的T-SQL支持子集不包含FOR JSON系列语法,而无服务器SQL池(Serverless Pool)基于更完整的T-SQL实现,因此可以正常运行原脚本。

替代方案

使用STRING_AGG函数手动拼接JSON格式的字符串,模拟FOR JSON AUTO的输出效果,具体修改如下:

修改后的动态SQL代码

将原脚本中定义@ColumnMetadataSQL的部分替换为:

SET @ColumnMetadataSQL = 'SET @ColumnMetadataOUT = ISNULL(''['' + STRING_AGG(
    ''{"TABLE_SCHEMA":"'' + REPLACE(TABLE_SCHEMA, ''"'', ''\"'') + ''",''
    + ''"TABLE_NAME":"'' + REPLACE(TABLE_NAME, ''"'', ''\"'') + ''",''
    + ''"COLUMN_NAME":"'' + REPLACE(COLUMN_NAME, ''"'', ''\"'') + ''",''
    + ''"ORDINAL_POSITION":'' + CAST(ORDINAL_POSITION AS VARCHAR(10)) + '',''
    + ''"DATA_TYPE":"'' + REPLACE(DATA_TYPE, ''"'', ''\"'') + ''"}'', '',''
) + '']'', ''[]'''')'
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = ''dbo''
    AND TABLE_NAME NOT IN (''OptionsetMetadata'', ''GlobalOptionsetMetadata'',''StateMetadata'',''StatusMetadata'', ''TargetMetadata'')
    AND TABLE_NAME LIKE ''%' + @BaseTableSuffix + ''''

关键说明

  1. 转义处理:用REPLACE函数将列值中的双引号替换为转义双引号(\"),避免JSON格式错误。
  2. 空结果集处理:用ISNULL函数确保当没有匹配的列元数据时,生成有效的空JSON数组[],而非NULL。
  3. 兼容性:STRING_AGG是专用SQL池支持的函数(要求数据库兼容级别≥130,Azure Synapse默认满足),可以安全使用。

验证方法

将@PreviewOnly设为1,执行脚本后查看@ColumnMetadata的内容,确认生成的JSON格式与原脚本在无服务器池中生成的一致,再切换为0创建视图。

内容的提问来源于stack exchange,提问作者Patterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:25:46