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

在Azure Data Factory中通过查询获取Salesforce表含归档及删除记录的方法咨询及报错排查

在Azure Data Factory中通过查询获取Salesforce表含归档及删除记录的方法咨询及报错排查

嗨,我来帮你解决这个问题!你遇到的语法错误是因为Microsoft Salesforce ODBC Driver对SOQL的ALL ROWS子句解析存在兼容性问题——虽然SELECT * FROM test ALL ROWS是标准的Salesforce SOQL语法,但ODBC驱动并不完全支持这种写法,所以才会抛出语法错误。

下面给你几个可行的解决方案,按推荐程度排序:


方案1:使用ADF内置Salesforce连接器(最推荐)

如果你还在使用ODBC连接Salesforce,建议切换到ADF原生的Salesforce连接器,它对Salesforce的特性支持更友好:

  1. 在ADF中创建新的Salesforce数据集,配置好连接信息
  2. 进入数据集的"Source"配置页,找到**"Include deleted and archived records"**选项并勾选它
  3. 然后直接编写常规的SOQL查询即可,不需要加ALL ROWS:
SELECT * FROM test

这样就能自动获取包括归档、已删除(回收站)在内的所有记录。


方案2:调整ODBC查询的写法

如果必须使用ODBC驱动,可以尝试两种替代写法:

写法A:通过字段筛选所有记录

直接查询所有包含已删除和未删除的记录(适用于大部分Salesforce对象):

SELECT * FROM test WHERE IsDeleted = TRUE OR IsDeleted = FALSE

注意:对于有IsArchived字段的对象(比如Task、Event),还需要加上IsArchived的筛选:

SELECT * FROM test WHERE (IsDeleted = TRUE OR IsDeleted = FALSE) AND (IsArchived = TRUE OR IsArchived = FALSE)

写法B:使用ODBC驱动支持的调用格式

部分版本的Microsoft Salesforce ODBC Driver需要用{CALL ...}包裹SOQL查询,你可以尝试这种写法:

{CALL SELECT * FROM test ALL ROWS}

如果还是不行,建议升级你的ODBC驱动到最新版本,新版本通常会修复更多SOQL语法兼容性问题。


报错原因补充

你看到的错误提示SOQL error: [Microsoft][SQLEngine] (31480) syntax error near 'SELECT Id FROM test ALL ROWS',本质是ODBC引擎无法识别Salesforce特有的ALL ROWS子句——ODBC驱动是将SQL转换为SOQL的中间层,它对Salesforce的非标准SQL语法支持有限,这就是为什么直接用标准SOQL会报错。

备注:内容来源于stack exchange,提问作者Herwini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:14:30