次のように、ローカルのSQLServerからリンクサーバーを作成しました。
http://sqlserverplanet.com/dba/local-linked-server
ただし、リンクサーバーでストアドプロシージャを実行しようとすると、次のようにスローされます。
Deferred prepare could not be completed
エラーおよび無効なオブジェクト名'テーブル名'
次のように、ローカルのSQLServerからリンクサーバーを作成しました。
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
ストアドプロシージャを実行するときは、SETFMTONLYOFFなどのオプションを確認してください。
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
再テストします。
リンクサーバーを介してクエリを実行しようとすると、同じエラーが発生しました。ただし、ストアド プロシージャではなく、ターゲット サーバーのビューに対してクエリを実行していました。
ターゲット サーバーのビューは次のように作成されました。
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
元のビューのメタデータの問題である必要があります。
これがお役に立てば幸いです!
私にとって同じ問題:正しく名前が付けられていない「ターゲット」オブジェクトを修正するだけで解決しました。
私の場合、[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 は、実際のオブジェクトと直接一致しない名前を動的に解決しようとしていると思いますが、それは確かではありません。
非常に簡単です。これが役立つことを願っています:)