【问题标题】:Using the results of a query in OPENQUERY在 OPENQUERY 中使用查询结果
【发布时间】:2010-09-30 14:09:56
【问题描述】:

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

【问题讨论】:

  • 能否将 Oracle 服务器添加为链接服务器,以便使用连接语法而不是调用 OPENQUERY?

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


【解决方案1】:

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

【讨论】:

  • 但是除非我从第一个查询中知道我需要的 ID,否则不会拉入整个表吗?
【解决方案2】:

我认为你不能进行连接,因为 OPENQUERY 需要一个纯字符串(正如你在上面写的那样)。

【讨论】:

    【解决方案3】:

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

    你可以做连接,但你会这样做:

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

    【讨论】:

      【解决方案4】:

      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* 
      

      干杯,比尔·吉布斯

      【讨论】:

        猜你喜欢
        • 2022-06-11
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-05
        • 2013-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多