0

我有一个链接到 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

4 回答 4

2

啊啊啊,小鬼。勾起不好的回忆!:)

你可以加入,但你会这样做:

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 中获取一个表变量......但也许......不,我对此表示怀疑。

于 2009-01-09T21:28:58.863 回答
1

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

于 2009-01-09T20:53:02.867 回答
1

我不认为你可以加入,因为 OPENQUERY 需要一个纯字符串(正如你上面写的)。

于 2009-01-09T20:53:44.487 回答
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* 

干杯,比尔吉布斯

于 2014-01-07T17:13:52.017 回答