Stu*_*SQL 4 ssis temporary-tables
我的问题如下:
我正在尝试使用来自 DB1 的数据创建一个全局临时表,然后在 DB2 中执行的查询中使用该临时表,然后将结果导入到 DB2 上的新表中。由于查询有点复杂,一个简单的合并连接不会做,因为我需要转换数据并根据两个数据库的数据添加一个额外的列 (dense_rank)。根据我的一位同事的说法,这应该可以在 SSIS 中完成。
我想在来自 DB2 的连接上执行的简化查询:
Select db2.a,db2.b,db2.c,db1.c, db1.d,
DENSE_RANK() OVER (PARTITION BY db2.a order by db1.c asc) as FinalRank
from DB2.table as db2
left join ##globaltemp as db1 on db2.a=db1.a
Run Code Online (Sandbox Code Playgroud)
经过大量的谷歌搜索和不同的尝试后,DB2 源连接将找不到我在 DB1 中创建的临时表 (##globaltemp)。
这样的操作甚至可能吗?
tldr:是否可以在 SSIS 会话中创建一个全局临时表并从中提取数据,而不管数据库是什么?
只要您留在会话上下文中,即使是本地临时表 (#Table) 也能工作。全局临时表 (##Table) 只是全局的,因为它可以被其他会话看到。
这里可能发生的事情是您的 create ##Table 会话超出范围/上下文,当会话消失时,它是临时表。无论是本地的还是全球的。所以创建临时表的过程超出了范围,它的临时表也消失了。
换句话说 - 问题不在于您连接到的数据库的范围。无论您使用什么数据库,都可以访问任何临时表。临时表不会在您的任何用户数据库(DB1 或 DB2)中创建,它们总是在 TempDB 中创建。
尝试使用派生表或考虑临时表等。
除了 Mike 的好答案之外,您缺少的 SSIS 中的设置是您必须为 OLE/ADO 连接管理器指定 RetainSameConnection 属性为 True。否则,SSIS 可以/将为创建全局表的执行 SQL 任务创建一个连接,关闭该连接,然后为数据流任务打开一个新连接,在这种情况下,临时表将被删除。
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |