并行加载临时表

Loading temporary tables in parallel

我通过执行 SQL 任务 (select * into x from remote_server) 将数据从一个 SQL 服务器 A 加载到临时 table 并加入数据流中的另一个远程 SQL 服务器 B。

所以我在数据流中有两个来源:

1.Local 临时 table 其中包含来自 SQL 服务器 A 的日期(在之前的任务中加载)

2.Table 在远程 SQL 服务器 B.

为了实现它,我更改了 "RetainSameConnection" 连接管理器 属性(我用它来将数据从 SQL 服务器 A 拉到本地计算机(SSIS 服务器)为 TRUE。它有效但我无法并行加载这些任务,因为我得到:

S [[209]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E14. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Description: "Statement(s) could not be prepared.". An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E14 Description: "Invalid object name '##V_DEL'.".

[SSIS.Pipeline] Error: "S" failed validation and returned validation status "VS_ISBROKEN".

如何解决?

如果您使用 RetainConnection = True,则一次只能有 1 个对象拥有保留连接。这意味着如果 2 sql 个任务 运行 并行,那么只有 1 个会使用保留的连接。类似于您无法使用相同的保留连接进行查找和目标的问题。 唯一的解决方法是序列化您的 SQL 调用。

简单的解决方案:只需在一个序列容器中执行 Global temp table 创建任务,然后在另一个序列容器中插入零件。它会很好地工作,我们可以 运行 并行执行 2 个任务。

将临时 table 创建部分放在一个序列容器中,然后将部分插入另一个序列容器中,即使我们 运行 并行任务具有多个全局临时 tables。