sql - Azure数据工厂说临时表是 "Invalid object name"?

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

我有一个非常大的查询,正在尝试在复制数据 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 复制工作流程的“源”时,它会立即显示错误:

A database operation failed with the following error: 'Invalid object name '#tmp'.' Invalid object name '#tmp'., SqlErrorNumber=208,Class=16,State=0, . Activity ID: 707769bc-a864-4e15-8217-bec1ef9462bb

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

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

最佳答案

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

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

关于sql - Azure数据工厂说临时表是 "Invalid object name"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61400888/

相关文章:

sql-server - 我创建的自定义快捷方式不起作用,可能是什么原因?

从包更新部署的 Azure 函数不可见

Azure 平台安装

sql - 如果没有使用 try/catch 或异常逻辑来回滚,那么在事务中包装存储过程是否有意义?

sql - 将 VarChar 转换为具有不同文化格式的 Float

php - 获取登录用户的 ID 以显示类别

sql-server - SQL : Storing guids

php - 如何为两个变量编写 SQL 语句,一个变量携带表名,另一个变量携带表中的特定列?

sql-server - 是否可以将 SQL Server session 上下文与 Azure 弹性查询一起使用

mysql - 使用 MySQL 进行条件计数