stackoverflowでこの質問を参照してください。
EasySoft ODBCドライバーを使用して、SQL Server 2008 R2 ExpressインスタンスをInterbaseにリンクしていますが、リモートサーバーからメタデータを取得するのに多少苦労しています。ネット上で見ると、主な提案はすべて、4つの部分のリンクサーバー構文の代わりにOPENQUERYを使用することに言及しています。
EG現在の(問題のある)アプローチは...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
しかし、いくつかのテーブルでは、ビューを呼び出すときにエラーが発生します...
メッセージ7353、レベル16、状態1、行1リンクサーバー "LBLIVE"のOLE DBプロバイダー "MSDASQL"は、一貫性のないメタデータを提供しました。コンパイル時に見つからなかった追加の列が実行中に提供されました。
また、次のようになったために作成できないビューもあります...
メッセージ7315、レベル16、状態1、行1リンクサーバー "LBLIVE"のOLE DBプロバイダー "MSDASQL"には、名前 "" SYSDBA "。" AUDIT_LBABKP ""に一致する複数のテーブルが含まれています。
ただし、言及されている表は1つだけです。
ネットを検索する別の方法は、もっと似ているようです...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
したがって、私の質問は、ビュー定義でOPENQUERYを使用すると、SQL ServerはInterbaseに送信される結果のSQLを最適化できますか?それとも、2つのアプローチの間にそれほど大きな違いはありませんか?
それはクロスオーバーの主題であり、dbaのPOVが大好きです。