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
相关产品推荐
相关产品推荐

