2016-06-16 7 views
1

物理サーバーにSQL Serverの2つのインスタンス、1つの2008 R2(ポート1433)と1つのプレーン2008(ポート1444)を実行しています。リンクされたSQL Serverから特定の列を選択

私はこのクエリを実行しようとすると、私はマルチパート識別子はバインドできませんでしたエラーが発生します

SELECT * 
FROM [LINKEDSERVER,1444].[DBNAME].[dbo].[TABLENAME] 

R2

リンクサーバーのセットアップし、次の問合せは、2008年から正常に実行できます。

SELECT [LINKEDSERVER,1444].[DBNAME].[dbo].[TABLENAME].[COLUMNNAME] 
FROM [LINKEDSERVER,1444].[DBNAME].[dbo].[TABLENAME] 

ここでは何が起こっているのかを誰か教えてください。私はシンプルな構文エラーや何かがあると仮定しますが、私が見つけることができる例はすべてSelect *であり、それは私が必要とするものではありません。

+0

完全に修飾するのではなく、 'SELECT'で列名を使ってみましたか? – Siyual

+0

クエリはSQL Serverの複数のインスタンスにまたがっており、同じインスタンス内の複数のデータベースにまたがっているため、完全修飾されている必要があります。私はそれが渦巻くように聞こえることを知っています、しかし、私はここに入るつもりはないので、この方法でなければなりません。同義語の解決策は私にとってはうまくいった。私はテーブルエイリアスを使用することができましたが、私はこれを常に照会しています。その短い名前は大いに役立ちます。 – user2625842

答えて

0

4つのレベルが最も深いですが、上記のケースで特定の列を参照する場合は、テーブルエイリアスを使用できます。 fromスペースにテーブル名の後ろにスペースを入れたり、短縮した略語を置く。そのエイリアスをクエリで参照して、問題を軽減することができます。

SELECT abrv.[COLUMNNAME] 
FROM [LINKEDSERVER,1444].[DBNAME].[dbo].[TABLENAME] abrv 

さらに別の代替あなたは多くは、実際にテーブルのシノニム(https://msdn.microsoft.com/en-us/library/ms187552.aspx)を作成し、それがローカルテーブルであるようにそれを使用することですリンクサーバー経由でアクセスしようとしている場合。

+1

ちょっとした用語がペットに苦労します - これらは表 "略語"と呼ばれるべきではありません。彼らはテーブル*エイリアス*です。 – Siyual

+0

良い点@Siyual私は答えが変わった – Matt

関連する問題