2011-06-30 4 views
2

リンクされたサーバ接続からの大文字と小文字を区別する照合を持つデータベースのビューを照会しようとしています。私が照会しようとしているビューは、基本的に3つのインデックス付きビューへのラッパーです。重複するカラム名...データベースが大文字と小文字を区別しない場合のみ

私は取得していますエラーは次のとおりです。

重複する列名は、OPENQUERYおよびOPENROWSETによって得られた結果セットでは許可されません。列名「ExtPrice」は重複しています。

私はEXTPRICEExtPriceを持っています。このビューをサーバーから直接照会すると問題はありませんが、リンクされたサーバー経由でクエリを使用しようとすると、上記のエラーが発生します。

  • これは照合の問題ですか?
  • このビューをリンクサーバー経由で使用するにはどうすればできますが、ビューでも大文字と小文字が区別されていることをクエリで認識できますか?

これが愚かな質問であれば、事前にお詫びします。

+1

「EXTPRICE」と「ExtPrice」の両方があるのはなぜですか? – JNK

+0

ベンダーデータベースからのデータ抽象化です。アイデアは、より良いデータ型を追加することでしたが、フィールドの内容が同じであることを表しています。したがって、ベンダーデータベースの日付はENTRYDATEと呼ばれ、varchar(8)として保存されます...そのテーブルを参照するビューでは、フィールドはEntryDate(パスカルの場合)と呼ばれ、実際には日付になります。私はビューモデルをテーブルに入れようとしましたが、私はまだこのベンダーのデータベースには新しく、なぜ彼らは彼らがしたことをすべて行ったのかを完全に理解していないので、データを追加するだけです。 –

+1

抽象ビュー名を 'v_ExtPrice'と変更するのは時期尚早ですか? – JNK

答えて

1

カラム名を変更する必要があります。 ENTRYDATE列がテキストで、EntryDateが日付データ型の場合は、ENTRYDATEをENTRYDATE_TEXTに変更します。 EntryDateをEntryDate_Improvedに変更します。リンクされたサーバービューを幸せにすることができたとしても、これを扱う将来の開発者は時間が無駄になり、非常に不明なのでバグが導入される可能性があります。

3

はい、これは、ビューが配置されているサーバーで大文字と小文字が区別される照合の結果です。

そして、私はここで指摘したように、私はいつも(だけではなく、列レベルで照合順序を使用しての)直接サーバーレベルで、大文字と小文字を区別照合を持っていることについてライチョウなぜそれがです: http://www.sqlmag.com/blog/practical-sql-server-45/tsql/Collation-SQL-Server-139576

のみを、しようとする際にCOLLATE句を分散クエリにどのように詰め込むのか、私の頭脳を包んで、もっと良い方法がなければならないと思いました。それは、分散クエリで照合順序で作業する際の照合オプションを指定する方法を定義したよう http://msdn.microsoft.com/en-us/library/ms191145.aspx :あなたのリンクサーバーの定義の一部として、いくつかの特定のオプションを設定することができますように見える

そして、。

ただし、アドホックな分散クエリを許可するのではなく、リンクされたサーバーを使用する必要があるという問題があります。だから私はリンクサーバーを使用することをお勧めしたいと思います。

は、同様にこのリンクを試してみてください - それはリンクサーバー上の照合順序の設定を制御する方法について詳しく説明しますと: http://msdn.microsoft.com/en-us/library/ms186839.aspx

をそして、もちろん、私はすべての可能であればカラム名を変更することをお勧めしたいです。

- マイク

関連する問題