sql-server - 如何在 SQL 中创建临时表以用于多个 ADF 活动?
问题描述
在执行 Azure 数据工厂管道时,我需要在我的 SQL Server 中创建一个全局临时表。该表将用于多项活动。
我已经尝试了几种方法,包括一种使用以sys.sp_executesql
SP 为目标的存储过程活动和CREATE TABLE
语句作为参数。使用这种方法实际上创建了表,但它在一秒钟后自动删除,我不明白为什么。
这是用于创建临时表的脚本:
CREATE TABLE ##tempGL
(
GLAccount NVARCHAR(15),
GLSubAccount NVARCHAR(15)
)
那么,如何从 Azure 数据工厂管道活动创建一个 SQL Server 临时表,该活动会一直持续到我删除它?
解决方案
我自己一直在为此苦苦挣扎。显然这是设计使然(请参阅下面来自 Microsoft 员工的报价),即使文档提到这是可能的,使用 Azure 数据工厂也无法实现这一点。
这是设计使然。我们不会在 2 个活动之间保持联系。如果您使用真实表而不是临时表。然后你会得到预期的结果。如果数据需要超过 1 个活动才能访问,建议不要在 ADF 中使用临时表。
https://github.com/MicrosoftDocs/azure-docs/issues/35449#issuecomment-517451867
发生这种情况的原因是当管道活动结束时会话被删除,这导致临时表也被删除。
当创建表的会话结束并且所有其他任务停止引用它们时,将自动删除全局临时表。任务和表之间的关联仅在单个 Transact-SQL 语句的生命周期内维护。这意味着在创建会话结束时主动引用该表的最后一个 Transact-SQL 语句完成时将删除全局临时表。
希望微软能在某个时候解决这个问题,并使得在 Azure 数据工厂的活动中使用临时表成为可能。
我在这里提出了这个作为 Azure 的建议https://feedback.azure.com/forums/270578-data-factory/suggestions/38287108-persist-global-temporary-tables-between-activities
对于任何阅读本文并可能想要他的功能的人,请支持该建议。
推荐阅读
- restler - Restler3 与 Grafana SimpleJson 插件的集成
- spring - 如何在自定义 Spring items.xml 中使用 OOTB 枚举作为属性类型
- git - OkHttp:3.12.x 分支会有发布吗?
- javascript - 替换重复的 document.getElementById
- codeigniter - 如何使用 htaccess 或 codeigniter 在 URL 中添加用户名
- python - Cython 是否将静态字典键编译为其哈希值?
- android - 打开使用 Retrofit2 下载的通知点击文件
- azure - 使用 appsettings.json 时 Azure 函数无法初始化 Serilog Sink
- xml - 向 XSD 中的 complexType 元素添加限制
- angular - AngularlazyLoading 从模块 1 工作到模块 2,但反之则不行,为什么?