With子句不起作用链接服务器

时间:2009-07-24 14:59:31

标签: sql-server oracle10g linked-server

我使用ms sql server链接服务器功能连接到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

由于

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

您发送的查询的棘手问题是在对列进行别名时转义单引号。也许这是一个需要调查的地方。