Ssis

在一個數據庫上創建全域臨時表並在另一個數據庫上的查詢中使用它 - 可能嗎?

  • November 23, 2016

我的問題如下:

我正在嘗試使用 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

經過廣泛的Google搜尋和不同的嘗試,DB2 源連接找不到我在 DB1 中創建的臨時表 (##globaltemp)。

這樣的操作甚至可能嗎?

tldr:是否可以在 SSIS 會話中創建全域臨時表並從中提取數據,無論數據庫如何?

只要您停留在會話上下文中,即使是本地臨時表 (#Table) 也可以工作。全域臨時表 (##Table) 只是全域的,因為它可以被其他會話看到。

這裡可能發生的是您的創建##Table 會話超出範圍/上下文,當會話消失時,它的臨時表就消失了。無論是本地的還是全球的。所以創建臨時表的過程超出了範圍,它的臨時表消失了。

換句話說 - 問題不在於您連接到的數據庫的範圍。無論您使用什麼數據庫,都可以訪問**任何臨時表。**臨時表不會在您的任何使用者數據庫(DB1 或 DB2)中創建,它們總是在 TempDB 中創建。

嘗試使用派生表或考慮臨時表等。

引用自:https://dba.stackexchange.com/questions/156028