我有一个链接到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。
答案 0 :(得分:1)
将openquery结果存储在临时表中,然后在SQL表和临时表之间进行内部连接。
答案 1 :(得分:1)
我不认为你可以进行连接,因为OPENQUERY需要一个纯字符串(如上所述)。
答案 2 :(得分:1)
你可以进行加入,但你会这样做:
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*
干杯,比尔吉布斯