感謝Tiran提供了他的建議解決方案。對於那些試圖通過Tiran在SQL Server中引用多個表的人,我有額外的輸入。
我試圖從多個來源(Progress),同一個表結構中同時提取數據並將其插入到我們的數據倉庫(SQL Server)中。所以我只是試圖在不同的數據庫中進行多個相同結構的表的聯合。 Tiran的解決方案讓我走上了同樣的道路,但Progress數據庫的鏈接是一個繁瑣的過程,需要我找到一個有2-3天空閒時間(他的引用)的Progress DBA來將它們放在一起。當我直接與Progress進行交流時,他們還指出,如果我在Progress一側創建了一個帶有聯合的視圖,它將順序地從視圖中的每個源提取數據,而不是同時提取數據。但是,這讓我發現了另一個發現,它似乎將解決我們的需求,並完全跳過處理Progress側鏈接表的問題。
下面是一個有三個來源的例子,同樣的表格(這也適用於交叉來源加入不同的表格)。這裏提供的所有名稱僅供參考。
Source 1 - Table_A
Source 2 - Table_A
Source 3 - Table_A
- 創建ODBC連接到名爲源1源1。
- 創建到Source 2的名爲source2的ODBC連接。
- 創建一個到名爲source3的源3的ODBC連接。 (請注意,您通常要確保將連接設置設置爲「未提交讀取」)。
在SQL Server中,創建到每個源的鏈接服務器連接。
ls_source1
ls_source2
ls_source3
在你需要引用的進展數據庫,創建加入了三種不同的鏈接服務器連接在一起,利用工會看你的SQL Server數據庫。鏈接的服務器引用都需要使用openquery。本示例在每個鏈接的服務器源中使用select *假定所有列都從每個源命名並構造相同。
CREATE VIEW table_name_v as
SELECT *
FROM
(SELECT *
FROM OPENQUERY(ls_source1,
'select *
from source1.dbo.Table_A
')
union
SELECT *
FROM OPENQUERY(ls_source2,
'select *
from source2.dbo.Table_A
'
union
SELECT *
FROM OPENQUERY(ls_source3,
'select *
from source3.dbo.Table_A
'
)
) x
通過創建視圖,您現在可以同時查詢不同進度源中的所有三個表。進度端沒有額外的設置是必要的。
有一個重要的警告,我目前正在爲解決的工作。如果您在使用64位SQL Server的64位計算機上,則需要使用64位驅動程序通過鏈接服務器選項連接到Progress數據庫。我的需求要求我在同一臺機器上同時安裝了32位和64位驅動程序,並且遇到了這些問題,因爲顯然當他們在同一臺機器上時,他們並不能很好地一起玩。我已經能夠在同一臺機器上安裝64位和32位驅動程序(Progress的網站上有一個小故障,本應該給我一個該驅動程序的鏈接,但是我能夠找到某人指引我到正確的地方以檢索64位odbc驅動程序,普通人不需要兩個驅動程序,只需使用64位。作爲替代解決方法,如果我無法在同一臺機器上同時存在兩個驅動程序,我發現並確認Connx公司提供的驅動程序提供了一個64位/ 32位橋接器,可以解決這個問題,理想情況下,不需要第三方軟件。我設置並正在使用的鏈接服務器不能正常運行。前進兩步,退一步......
只是想我會分享我的發現,因爲我確信還有其他人在尋找。
OpenEdge,hunh?我有一個有趣的解決方案,但它只適用於JDBC(在OpenEdge 10+上)和Ruby。可能會讓你的場景變得不可行,但是如果不是,請告訴我。 –