web-dev-qa-db-ja.com

ローカルデータベースをリンクサーバーとして使用している場合の「遅延準備を完了できませんでした」エラー

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

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

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

Deferred prepare could not be completed

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

17
Anand B

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

リンクサーバー経由でクエリを実行するときに完全なオブジェクト名を指定します。

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

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

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

OPENQUERYのこのリンクをたどってください: http://msdn.Microsoft.com/en-us/library/ms188427.aspx

13
Vishal Vaishya

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

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

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

一番下の行は、最初に正確性のためにリモートサーバーに送信される実際のクエリをチェックし、次にそれをopenqueryでラップして再テストします。

6
ajeh

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

私の場合、[testDb].[Business.Customer]テーブル、ただし正しい名前は[testDb].[Business].[Customer]...あなたと同じエラー:

Il provider OLE il server collegatoごとのDB "SQLNCLI10" "RIBOWEB10\SQLEXPRESS" ha restituito il messaggio "遅延準備は完了できませんでした。".

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

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

1
MAXE

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

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

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

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

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

1
user3377487

私は同じ問題を抱えていました。私が抱えていた問題は、リンクサーバー接続で指定されたユーザーが、アクセスしようとしたデータベースにアクセスできなかったことです。

0
ASindleMouat