在OPENQUERY中使用查询的结果

时间:2009-01-09 20:49:59

标签: sql-server sql-server-2005 oracle oracle10g openquery

我有一个链接到Oracle数据库的SQL Server 2005数据库。我想要做的是运行一个查询从中提取一些ID号,然后找出哪些是在Oracle中。

所以我想看一下这个查询的结果:

SELECT pidm
FROM sql_server_table

执行类似这样的操作来查询Oracle数据库(假设前一个查询的结果存储在@pidms中):

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

但是我很难想出一个很好的方法来做到这一点。我想我可以做一个与这两个类似的查询的内部联接。不幸的是,有很多记录需要在有限的时间内完成,所以我认为这不是一个非常有效的选择。

有什么建议吗?理想情况下,我希望尽可能少地使用动态SQL。

4 个答案:

答案 0 :(得分:1)

将openquery结果存储在临时表中,然后在SQL表和临时表之间进行内部连接。

答案 1 :(得分:1)

我不认为你可以进行连接,因为OPENQUERY需要一个纯字符串(如上所述)。

答案 2 :(得分: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

我不确定你是否可以编写一个PL / SQL程序来从sql中获取一个表变量......但也许.....不,我对此表示怀疑。

答案 3 :(得分:0)

BG:实际上通过OpenQuery加入SQLServer到Oracle的工作,避免了#tmp表并允许JOIN到SQL而没有Param * - ex。

[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* 

干杯,比尔吉布斯