首页 > 解决方案 > 如何在 SQL 中创建临时表以用于多个 ADF 活动?

问题描述

在执行 Azure 数据工厂管道时,我需要在我的 SQL Server 中创建一个全局临时表。该表将用于多项活动。

我已经尝试了几种方法,包括一种使用以sys.sp_executesqlSP 为目标的存储过程活动和CREATE TABLE语句作为参数。使用这种方法实际上创建了表,但它在一秒钟后自动删除,我不明白为什么。

这是用于创建临时表的脚本:

CREATE TABLE ##tempGL
(
    GLAccount NVARCHAR(15),
    GLSubAccount NVARCHAR(15)
)

那么,如何从 Azure 数据工厂管道活动创建一个 SQL Server 临时表,该活动会一直持续到我删除它?

标签: sql-serverazure-data-factory-2

解决方案


我自己一直在为此苦苦挣扎。显然这是设计使然(请参阅下面来自 Microsoft 员工的报价),即使文档提到这是可能的,使用 Azure 数据工厂也无法实现这一点。

这是设计使然。我们不会在 2 个活动之间保持联系。如果您使用真实表而不是临时表。然后你会得到预期的结果。如果数据需要超过 1 个活动才能访问,建议不要在 ADF 中使用临时表。

https://github.com/MicrosoftDocs/azure-docs/issues/35449#issuecomment-517451867

发生这种情况的原因是当管道活动结束时会话被删除,这导致临时表也被删除。

当创建表的会话结束并且所有其他任务停止引用它们时,将自动删除全局临时表。任务和表之间的关联仅在单个 Transact-SQL 语句的生命周期内维护。这意味着在创建会话结束时主动引用该表的最后一个 Transact-SQL 语句完成时将删除全局临时表。

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-server-2017#temporary-tables

希望微软能在某个时候解决这个问题,并使得在 Azure 数据工厂的活动中使用临时表成为可能。


我在这里提出了这个作为 Azure 的建议https://feedback.azure.com/forums/270578-data-factory/suggestions/38287108-persist-global-temporary-tables-between-activities

对于任何阅读本文并可能想要他的功能的人,请支持该建议。


推荐阅读