我使用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
由于
答案 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解析器/编译器的有效语句。
您发送的查询的棘手问题是在对列进行别名时转义单引号。也许这是一个需要调查的地方。