次のように、ローカルSQLサーバーからリンクサーバーを作成しました。
http://sqlserverplanet.com/dba/local-linked-server
ただし、リンクサーバーでストアドプロシージャを実行しようとすると、次のようにスローされます。
Deferred prepare could not be completed
エラーおよび無効なオブジェクト名「テーブル名」
オブジェクト名に何か見落としがありますか。常に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
クエリで誤って列に名前を付けた場合でも、このエラーが表示されます。例:
select *
from openquery(
lnksrv
,'select top 10 * from db.schema.table where colunm = 10'
)
列名はcolumn
ではなくcolunm
です。
一番下の行は、最初に正確性のためにリモートサーバーに送信される実際のクエリをチェックし、次にそれをopenquery
でラップして再テストします。
私にとっても同じ問題:正しい名前が付けられていない「ターゲット」オブジェクトを修正するだけで解決しました。
私の場合、[testDb].[Business.Customer]
テーブル、ただし正しい名前は[testDb].[Business].[Customer]
...あなたと同じエラー:
Il provider OLE il server collegatoごとのDB "SQLNCLI10" "RIBOWEB10\SQLEXPRESS" ha restituito il messaggio "遅延準備は完了できませんでした。".
SQL Serverは、実際のオブジェクトと直接一致しない名前を動的に解決しようとすると思いますが、確かではありません。
とても簡単です。これが役立つことを願っています:)
リンクサーバー経由でクエリしようとすると、同じエラーが発生しました。ただし、ストアドプロシージャではなく、ターゲットサーバーのビューをクエリしていました。
ターゲットサーバーのビューは次のように作成されました。
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
元のビューのメタデータの問題である必要があります。
これがお役に立てば幸いです!
私は同じ問題を抱えていました。私が抱えていた問題は、リンクサーバー接続で指定されたユーザーが、アクセスしようとしたデータベースにアクセスできなかったことです。