2009-07-24 6 views
0

Ich habe zu einem Oracle-10g-Server wurde Verbindungs ​​MS SQL Server-Verbindungsserver-Funktion und aus irgendeinem Grunde bin ich mit nicht in der Lage die Klausel zu verwenden. Ist diese Klausel nur funktionieren, in der PL/SQL-Konsole, oder gibt es etwas, was ich tun kann, um es auch mit verbundenen Servern funktioniert?Mit-Klausel funktioniert nicht Server verknüpft

Der Fehler ich bin immer ist

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

Edit: Dachte gerade ich hinzufügen würde, dass ich Openquery bin mit dem Verbindungsserver

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 

Dank

+0

Bitte veröffentlichen Sie ein Snippet der Anweisung, die die Ausnahme verursacht. Das macht die Diagnose viel einfacher! –

Antwort

1

Nach technet.microsoft.com, das Ziel von OPENQUERY muss eine OLE-DB-Datenquelle sein; "Dies unterliegt den Fähigkeiten des OLE DB-Anbieters."

Meine Vermutung ist, dass der OLE DB-Provider nicht wissen, wie die WITH-Klausel zu verarbeiten, trotz der Tatsache, dass die Oracle-Datenbank selbst (zumindest seit 9ir2).

+0

Danke Jeff. Das habe ich mir gedacht. – zSynopsis

0

Die WITH abfragen Schlüsselwort ist ANSI-reserviert. In SQL Server wird das Schlüsselwort WITH für allgemeine Tabellenausdrücke verwendet. Ich bin nicht vertraut mit PL/SQL und seiner genauen Syntax um das WITH-Schlüsselwort. Mein einziger Vorschlag ist, um sicherzustellen, dass die Anweisungen, die Sie in der ÖffnenAbfrage- Methode sind zu senden sind valide Aussagen zu den PL/SQL-Parser/Compiler.

Die heikle Sache über die Abfrage Sie senden das Entkommen der einfachen Anführungszeichen, während die Spalten Aliasing. Vielleicht ist das ein Punkt, den es zu untersuchen gilt.

+0

Ich verwende OpenQuery, um eine Abfrage auszuführen. Ich denke nicht, dass SQL das jetzt analysieren würde, oder? – zSynopsis

+0

Nur ein Hinweis: * PL/SQL * ist Oracles Prozedur Erweiterung zu SQL; Es wird hier nicht verwendet. WITH ist ein Syntaxelement in aktuellen Versionen von Oracle SQL, nicht in PL/SQL. –

1

Versuchen Sie, die Abfrage unten, es wird funktionieren, wenn Sie die Klausel innerhalb subquery nennen.

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