2016-08-02 19 views
1

リンクサーバーにアクセスするためにOPENQUERYを使用してT-SQLクエリを実行するときにJDBCのエラーは、私がプリペアドステートメントを使用して、SQL Serverのクエリを実行しようとしている

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

更新

missinを追加するには、SQL文を固定した後私は今のエラーを取得

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

+0

がするように、これは

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

の作品あなたはOLEDBの設定が間違っているように見える – Jens

+0

あなたは 'INNER'と' ON'の前にスペースがありません。 – Andreas

+0

'INNER'と' ON'の前に空白を追加しました。エラーが発生しました: 'com.microsoft.sqlserver.jdbc.SQLServerException:複数の部分の識別子" cC "をバインドできませんでした。私のポストの質問) – Platus

答えて

0

テーブルの別名が内OPENQUERY機能をを使用グラムスペース

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 ?"); 

は、単にそれを呼び出すクエリには使用できません。だから、これは 'バインドできませんでしたマルチパート識別子 "c.ID"' で失​​敗します。

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

が、この

SELECT * 
FROM 
    OPENQUERY(ACCDBTEST, 'SELECT c.ID, c.LastName FROM Clients c') AS x 
WHERE x.ID = 1 
関連する問題