0

我一直在使用 ms sql 服务器链接服务器功能连接到 oracle 10g 服务器,但由于某种原因,我无法使用 with 子句。该子句是否仅在 pl/sql 控制台中有效,或者我可以做些什么来使其也适用于链接服务器?

我得到的错误是

Msg 7357, Level 16, State 2, Line 1
Cannot process the object "

编辑:只是想我会补充一点,我正在使用 openquery 来查询链接服务器

SELECT *
FROM OPENQUERY(LINKED_SERVER_ORACLE, 
'
    WITH assignment_t AS (
        SELECT ''1x'' ID, 2 type_id, 554 assign_id FROM dual UNION ALL
        SELECT ''1x'', 3, 664 FROM dual UNION ALL
        SELECT ''2x'', 2, 919 FROM dual UNION ALL
        SELECT ''2x'', 4, 514 FROM dual
     ), type_t AS (
        SELECT 1 type_id, DATE ''2009-01-01'' create_date FROM dual UNION ALL
        SELECT 2, DATE ''2009-01-01'' FROM dual UNION ALL
      SELECT 3, DATE ''2009-01-03'' FROM dual UNION ALL
       SELECT 4, DATE ''2009-01-04'' FROM dual
      )
     SELECT DISTINCT a.*
     FROM assignment_t a
     JOIN type_t t ON (a.type_id = t.type_id)
    '
    ) AS QUERY

谢谢

4

3 回答 3

1

根据technet.microsoft.com的说法,OPENQUERY 的目标必须是 OLE DB 数据源;“这取决于 OLE DB 提供程序的功能。”

我的猜测是 OLE DB 提供程序不知道如何处理 WITH 子句,尽管 Oracle 数据库本身可以(至少,从 9ir2 开始)。

于 2009-07-25T05:33:50.453 回答
1

尝试下面的查询,如果您在子查询中调用 with 子句,它将起作用。

SELECT *
FROM OPENQUERY(LINKED_SERVER_ORACLE, 
'
    select * from (    WITH assignment_t AS (
        SELECT ''1x'' ID, 2 type_id, 554 assign_id FROM dual UNION ALL
        SELECT ''1x'', 3, 664 FROM dual UNION ALL
        SELECT ''2x'', 2, 919 FROM dual UNION ALL
        SELECT ''2x'', 4, 514 FROM dual
     ), type_t AS (
        SELECT 1 type_id, DATE ''2009-01-01'' create_date FROM dual UNION ALL
        SELECT 2, DATE ''2009-01-01'' FROM dual UNION ALL
      SELECT 3, DATE ''2009-01-03'' FROM dual UNION ALL
       SELECT 4, DATE ''2009-01-04'' FROM dual
     )
     SELECT DISTINCT a.*
         FROM assignment_t a
         JOIN type_t t ON (a.type_id = t.type_id) )
'
) AS QUERY 
于 2013-05-31T02:40:15.210 回答
0

WITH关键字是 ANSI 保留的。在 SQL Server 中,WITH关键字用于公用表表达式。我不熟悉 PL/SQL 及其与 WITH 关键字相关的确切语法。我唯一的建议是确保您在 OpenQuery 方法中发送的语句是对 PL/SQL 解析器/编译器的有效语句。

您发送的查询的棘手之处在于在为列设置别名时转义单引号。也许这是一个需要调查的地方。

于 2009-07-24T15:06:59.300 回答