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

Azure Data Factory复制活动查询含AS关键字表名SQL报错求助

解决Azure Data Factory复制数据活动中含关键字/特殊字符表名的SQL查询错误

问题场景

当使用ADF复制数据活动执行包含特殊字符、空格及SQL关键字(如AS)的表名查询时,即使表名已用方括号包裹,仍会触发语法错误:

  • 执行的SQL语句:
SELECT [timestamp],[Name],[VAT Registration NO_],[Name 2] FROM dbo.[AS Processing Data$Data Information] WHERE [timestamp] > 0
  • 收到的错误:
ErrorCode=SqlOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=A database operation failed with the following error: ''Incorrect syntax near the keyword ''AS''.'',Source='',''Type=System.Data.SqlClient.SqlException,Message=Incorrect syntax near the keyword ''AS''.,Source=.Net SqlClient Data Provider,SqlErrorNumber=156,Class=15,ErrorCode=-2146232060,State=1,Errors=[{Class=15,Number=156,State=1,Message=Incorrect syntax near the keyword ''AS''.,},],

该查询在SSMS中可正常运行,推测ADF的SQL解析逻辑错误移除了表名的方括号,导致SQL Server收到非法语句。

可行解决办法

1. 创建数据库同义词

在源SQL数据库中为目标表创建同义词,简化表名并避开关键字/特殊字符:

CREATE SYNONYM dbo.AS_Processing_Data_Info FOR dbo.[AS Processing Data$Data Information];

之后在ADF的复制活动中使用同义词替换原表名:

SELECT [timestamp],[Name],[VAT Registration NO_],[Name 2] FROM dbo.AS_Processing_Data_Info WHERE [timestamp] > 0

2. 封装查询为存储过程

将查询逻辑封装到存储过程中,ADF调用存储过程而非直接执行SQL语句:

CREATE PROCEDURE Get_Processing_Data_Info
AS
BEGIN
    SELECT [timestamp],[Name],[VAT Registration NO_],[Name 2] 
    FROM dbo.[AS Processing Data$Data Information] 
    WHERE [timestamp] > 0
END

在ADF复制活动的源配置中,选择"存储过程"类型,指定该存储过程名称即可。

3. 使用动态SQL执行查询

在ADF中使用动态SQL包裹原查询,让SQL Server直接解析完整语句:

EXEC('SELECT [timestamp],[Name],[VAT Registration NO_],[Name 2] FROM dbo.[AS Processing Data$Data Information] WHERE [timestamp] > 0')

这种方式会跳过ADF对内部SQL的解析,直接将整个命令发送给SQL Server执行。

后续建议

如果以上临时方案无法满足需求,可通过Azure门户提交支持工单,向微软反馈该ADF解析逻辑的bug,提供复现场景及相关日志,推动官方修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:52:43