2016-08-02 3 views
1

Ich versuche, eine SQL Server-Abfrage mit Prepared-Anweisungen auszuführen:JDBC Fehler beim Ausführen einer T-SQL-Abfrage, die OPENQUERY verwendet einen Verbindungsserver zuzugreifen

PreparedStatement pst = con.prepareStatement("select * from openquery(SERVERNAME," + 
              "'Select r.A , r.B, c.C from Y r" + 
              "INNER JOIN X c" + 
              "ON r.RNID = c.RNID ')" + 
              "where c.C in ?"); 

pst.setString(1, data); 

ResultSet rs = pst.executeQuery(); 

ich diese Fehlermeldung:

com.microsoft.sqlserver.jdbc.SQLServerException: Cannot get the column information from OLE DB provider "MSDASQL" for linked server "SERVERNAME".

aktualisieren

nach der SQL-Anweisung zur Festsetzung des missin hinzufügen g Räume

PreparedStatement pst = con.prepareStatement("select * from openquery(SERVERNAME, " + 
              "'Select r.A , r.B, c.C from Y r " + 
              "INNER JOIN X c " + 
              "ON r.RNID = c.RNID ') " + 
              "where c.C in ?"); 

ich jetzt den Fehler

com.microsoft.sqlserver.jdbc.SQLServerException: The multi-part identifier "c.C" could not be bound

+0

Sieht aus wie Sie OLEDB Konfiguration ist falsch – Jens

+0

Sie fehlen Leerzeichen vor 'INNER' und' ON'. – Andreas

+0

Ich habe Leerzeichen vor 'INNER' und' ON' hinzugefügt und bekomme den Fehler: 'com.microsoft.sqlserver.jdbc.SQLServerException: Die mehrteilige Kennung" cC "konnte nicht gebunden werden. (Ich habe die Attributnamen in aktualisiert die Abfrage in meinem Post) – Platus

Antwort

0

Die Aliase Tabelle innerhalb die OPENQUERY Funktion verwendet werden, sind einfach auf die Abfrage nicht zur Verfügung, die es nennt. So wird diese nicht mit 'mehrteilige Bezeichner "c.ID" konnte nicht gebunden werden':

SELECT * 
FROM 
    OPENQUERY(ACCDBTEST, 'SELECT c.ID, c.LastName FROM Clients c') 
WHERE c.ID = 1 

aber das funktioniert

SELECT * 
FROM 
    OPENQUERY(ACCDBTEST, 'SELECT c.ID, c.LastName FROM Clients c') 
WHERE ID = 1 

wie dieses tut

SELECT * 
FROM 
    OPENQUERY(ACCDBTEST, 'SELECT c.ID, c.LastName FROM Clients c') AS x 
WHERE x.ID = 1 
Verwandte Themen