【问题标题】:Azure data factory says temp table is an "Invalid object name"?Azure 数据工厂说临时表是“无效的对象名称”?
【发布时间】:2020-08-07 14:02:17
【问题描述】:

我尝试在复制数据 Azure 数据工厂 (ADF) 工作流中使用一个非常大的查询。这是它的简化版本:

CREATE TABLE #tmp
    (
        Name VARCHAR(255)
        ,… --some other fields
    );
    INSERT INTO #tmp
    (
      Name
  ,… --some other fields
    )
    EXECUTE sp_getData


    SELECT t.Name
FROM #tmp AS t
    
BEGIN TRY 
    DROP TABLE #tmp 
END TRY 
BEGIN CATCH 
END CATCH

当我将此查询指定为我的 ADF 复制工作流程的“源”时,它会立即显示错误:

数据库操作失败并出现以下错误:'无效对象 名称“#tmp”。无效的对象名称 '#tmp'., SqlErrorNumber=208,Class=16,State=0, .活动编号: 707769bc-a864-4e15-8217-bec1ef9462bb

如果我直接在 SSMS 中运行此查询,它执行得很好,根本不会显示任何错误。但是,如果我在 ADF 创建向导中并单击“验证”按钮,它会显示错误消息,显示“正在加载预览”一段时间,然后按预期返回数据。如果我尝试单击“下一步”继续进行复制数据设置,它不会让我继续。不幸的是,它似乎没有指定查询中的哪一行导致错误,所以我不确定问题出在哪里。

为什么我会在 ADF 中收到此错误,而不是在 SSMS 本身中?我使用同一个帐户来执行查询,除了一个从 ADF 运行和一个直接从 SSMS 运行之外,我看不到任何差异。这是 ADF 的限制吗?我该如何解决这个问题?

【问题讨论】:

  • 需要临时表吗?我猜它只是验证查询而不是实际运行它。我建议您在前面的步骤中填充一个永久表,然后在数据流中从中进行选择。

标签: sql sql-server azure azure-data-factory


【解决方案1】:

在内部,#temp 表是在 tempdb 中创建的,但链接服务指向指定的数据库,因此出现此错误。

请使用表变量@temp table,它会正常工作。

【讨论】:

  • 完美,我将#TMP 更改为@TMP 并完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多