无法在 SSIS 控制流中的一个又一个“执行 SQL 任务”中使用临时表

问题描述 投票:0回答:2

我在控制流中有两项任务。第一个任务是在序列容器中并创建多个全局临时表。第二个任务使用这些临时表。这两个任务都在“执行 SQL 任务”中。它们都使用本机 OLE DB\SQL Server Native Client 11.0 驱动程序连接到 SQL Server。我将这两个属性设置为

True
:

  • “延迟验证”和
  • “保持相同的连接”。

当第一个序列容器运行时,我看到临时表在处于“黄色”或运行状态时通过 Management Studio 窗口创建。一旦第一个任务完成,它们就会变成绿色(完成),下一个任务将无法使用这些全局临时表。我也无法在管理工作室中看到这些表格了。

如何保留这些临时表,以便它们可以在后续任务中的同一 dtsx 任务中使用?

ssis temp-tables ssis-2012 control-flow execute-sql-task
2个回答
3
投票

正如布拉德和你所写的那样,看来你做的一切都是正确的。

让我们尝试基本的复制,并让我知道这在您的环境中是否有效。我们将有一个两个任务包,都执行 SQL 任务

创建 OLEDB 连接管理器,并将

RetainSameConnection
设置为
True

SQL 创建全局临时值

第一个执行sql任务会创建全局临时表

DROP TABLE IF EXISTS ##SO_77411558;
CREATE TABLE ##SO_77411558
(
   Col1 int
);

SQL 使用全局临时值

在第二个执行 SQL 任务中,我们将向表中添加一行

INSERT INTO ##SO_77411558
SELECT 3;

此时,我已经全面接受果岭了。

如果我在第二个执行 SQL 任务之后添加一个空的序列容器并在其上放置一个断点

然后我可以验证全局表是否保留,因为包尚未完成

sqlcmd -S .\dev2017 -E -d tempdb -Q "SELECT T.name FROM sys.tables AS T WHERE T.name like '%SO%'"
name
-----------------
##SO_77411558

(1 rows affected)

0
投票

我意识到这是一篇 5 个月前的帖子,但我也遇到了类似的问题。

我正在将数据从我拥有有限权限的一台服务器(这就是我坚持使用##Temp表的原因)移动到我可以完全控制的一台服务器。处理数据需要 10 个不同的查询。我可以同时运行其中五个,因此我将它们放入序列容器中。他们五个人都创建了##Temps。然而……完成后,它们都不可见。如果我将它们全部从容器中取出并按顺序一次运行它们......它们都会持续存在。所以这是序列容器以某种方式导致它们在我填充完它们后立即删除。 我的 ConnectionManager 中 100% 有 RetainSameConnection = True 。 ChatG 建议也许设置 IsolationLevl = ReadUncommissed...没有帮助。

有什么想法吗?我可以按顺序排列它们,但将五个一起运行会更有效。

© www.soinside.com 2019 - 2024. All rights reserved.