2009-01-09 101 views
0

我有一個鏈接到Oracle數據庫的SQL Server 2005數據庫。我想要做的是運行一個查詢來從中拉出一些ID號,然後找出哪些是在Oracle中。在OPENQUERY中使用查詢的結果

所以我想利用這個查詢的結果:

SELECT pidm 
FROM sql_server_table 

,做這樣的事情來查詢Oracle數據庫(假設前面的查詢結果存儲在@pidms):

OPENQUERY(oracledb, 
' 
SELECT pidm 
FROM table 
WHERE pidm IN (' + 
@pidms + ')') 
GO 

但我很難想出一個很好的方法來做到這一點。我想我可以做一個類似於這兩個查詢的內連接。不幸的是,在有限的時間內有很多記錄需要處理,所以我認爲這不是一個非常好的選擇。

有什麼建議嗎?理想情況下,我希望儘可能使用盡可能少的Dynamic SQL來完成此操作。

+0

你能添加Oracle服務器作爲鏈接服務器,這樣就可以使用加入語法而不是調用OPENQUERY? – cmsjr 2009-01-09 23:39:59

回答

1

啊啊,pidms。帶回不好的回憶! :)

你可以做的加入,但你會做這樣的:

select sql.pidm,sql.field2 from sqltable as sql 
inner join 
(select pidm,field2 from oracledb..schema.table) as orcl 
on 
sql.pidm = orcl.pidm 

我不知道,如果你能寫,將採取表變量從SQL PL/SQL程序。 ..但也許.....不,我懷疑它。

1

將openquery結果存儲在臨時表中,然後在SQL表和臨時表之間進行內部連接。

+0

但是,除非我知道從第一個查詢中需要的id,否則不會拉到整個表中? – 2009-01-09 21:07:57

1

我不認爲你可以做一個連接,因爲OPENQUERY需要一個純字符串(就像你上面寫的那樣)。

0

BG:實際上通過OpenQuery將SQLServer加入到Oracle中,避免了#tmp表,並且允許在沒有參數*的情況下連接到SQL。

[SQL SP] LEFT JOIN OPENQUERY(ORADB, 
'SELECT COUNT(distinct O.ORD_NUM) LCNT, 
O.ORD_MAIN_NUM 
FROM CUSTOMER.CUST_FILE C 
JOIN CUSTOMER.ORDER_NEW O 
ON C.ID = O.ORD_ID 
WHERE C.CUS_ID NOT IN (''2'',''3'') 
GROUP BY O.ORD_MAIN_MACNUM') LC 
ON T.ID = LC.ORD_MAIN_ID* 

歡呼聲中,比爾·吉布斯