25

次のように、ローカルのSQLServerからリンクサーバーを作成しました。

http://sqlserverplanet.com/dba/local-linked-server

ただし、リンクサーバーでストアドプロシージャを実行しようとすると、次のようにスローされます。

Deferred prepare could not be completed

エラーおよび無効なオブジェクト名'テーブル名'

4

5 に答える 5

20

オブジェクト名に何か見落としがありますか。常にDatabase.User.ObjectNameのようにする必要があります(たとえば、Northwind.dbo.Customers)

リンクサーバーを介してクエリを実行する場合は、完全なオブジェクト名を指定してください。

リンクサーバーで実行する場合、ストアドプロシージャのクエリは次のようになります。

Select  *
From    OPENQUERY([COM2\SQLEXPRESS], 'Exec Northwind.dbo.CustOrderHist ''CUST1''') as TB1

ストアドプロシージャを実行するときは、SETFMTONLYOFFなどのオプションを確認してください。

OPENQUERYについては、次のリンクをたどってください:http: //msdn.microsoft.com/en-us/library/ms188427.aspx

于 2013-03-08T04:14:15.377 に答える
6

クエリで列に間違った名前を付けた場合でも、このエラーが表示されます。例:

select *
from openquery(
     lnksrv
    ,'select top 10 * from db.schema.table where colunm = 10'
)

列名はcolumnではなくcolunmです。

結論としては、最初にリモートサーバーに送信される実際のクエリが正しいかどうかを確認し、次にそれをラップしてopenquery再テストします。

于 2016-05-11T17:16:32.557 に答える
1

リンクサーバーを介してクエリを実行しようとすると、同じエラーが発生しました。ただし、ストアド プロシージャではなく、ターゲット サーバーのビューに対してクエリを実行していました。

ターゲット サーバーのビューは次のように作成されました。

CREATE VIEW vABC AS
    SELECT ... FROM Table1
    UNION ALL
    SELECT ... FROM Table2

この問題を解決するために、次のように、ビューを変更し、2 つの UNION ステートメントをサブクエリでラップしました。

CREATE VIEW vABC AS
    SELECT * FROM (
        SELECT ... FROM Table1
        UNION ALL
        SELECT ... FROM Table2
    ) T

元のビューのメタデータの問題である必要があります。

これがお役に立てば幸いです!

于 2014-03-06T16:13:20.860 に答える
1

私にとって同じ問題:正しく名前が付けられていない「ターゲット」オブジェクトを修正するだけで解決しました。

私の場合、[testDb].[Business.Customer]テーブルを検索していましたが、正しい名前は[testDb].[Business].[Customer]...あなたのものと同じエラーでした:

Il provider OLE DB "SQLNCLI10" per il server collegato "RIBOWEB10\SQLEXPRESS" ha restituito il message "Deferred prepare could not be completed.".

SQL Server は、実際のオブジェクトと直接一致しない名前を動的に解決しようとしていると思いますが、それは確かではありません。

非常に簡単です。これが役立つことを願っています:)

于 2014-04-28T12:14:22.153 に答える