我在控制流中有两项任务。第一个任务是在序列容器中并创建多个全局临时表。第二个任务使用这些临时表。这两个任务都在“执行 SQL 任务”中。它们都使用本机 OLE DB\SQL Server Native Client 11.0 驱动程序连接到 SQL Server。我将这两个属性设置为
True
:
当第一个序列容器运行时,我看到临时表在处于“黄色”或运行状态时通过 Management Studio 窗口创建。一旦第一个任务完成,它们就会变成绿色(完成),下一个任务将无法使用这些全局临时表。我也无法在管理工作室中看到这些表格了。
如何保留这些临时表,以便它们可以在后续任务中的同一 dtsx 任务中使用?
正如布拉德和你所写的那样,看来你做的一切都是正确的。
让我们尝试基本的复制,并让我知道这在您的环境中是否有效。我们将有一个两个任务包,都执行 SQL 任务
创建 OLEDB 连接管理器,并将
RetainSameConnection
设置为 True
第一个执行sql任务会创建全局临时表
DROP TABLE IF EXISTS ##SO_77411558;
CREATE TABLE ##SO_77411558
(
Col1 int
);
在第二个执行 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)
我意识到这是一篇 5 个月前的帖子,但我也遇到了类似的问题。
我正在将数据从我拥有有限权限的一台服务器(这就是我坚持使用##Temp表的原因)移动到我可以完全控制的一台服务器。处理数据需要 10 个不同的查询。我可以同时运行其中五个,因此我将它们放入序列容器中。他们五个人都创建了##Temps。然而……完成后,它们都不可见。如果我将它们全部从容器中取出并按顺序一次运行它们......它们都会持续存在。所以这是序列容器以某种方式导致它们在我填充完它们后立即删除。 我的 ConnectionManager 中 100% 有 RetainSameConnection = True 。 ChatG 建议也许设置 IsolationLevl = ReadUncommissed...没有帮助。
有什么想法吗?我可以按顺序排列它们,但将五个一起运行会更有效。