3

SQL Server 2005 を使用しています。2 つのテーブルがあり、異なる照合順序を使用しています。照合順序が異なるテーブルの列を連結することは許可されていません。たとえば、次の SQL は許可されていません。

select table1column1 + table2column2 from ...

私の質問は、データベース エンジンの設計の観点から、異なる照合順序からの 2 つの列の連結が許可されないのはなぜですか? 照合が結果に影響を与える理由がわかりません。結果は文字列を連結するだけです-十分に単純で、照合に依存しない必要があります...

前もって感謝します、ジョージ

4

2 に答える 2

4

Table1Column1hasSQL_Latin1_General_CP1_CI_ASTable2Column2hasとしましょうLatin1_General_CI_AS。次に、これを行うことができます:

SELECT Table1Column1 + Table2Column2 COLLATE SQL_Latin1_General_CP1_CI_AS

これで問題が解決することを願っています:)

于 2012-04-20T06:08:23.920 に答える
1

わかった、

答えは、Unicodeで動作するシステムを設計することは、ASCII文字セットよりもはるかに難しいということだと思います。あなたは手紙以上のものを心配しなければなりません。あなたがアラビア語とフランス語を持っていたなら、彼らが異なる方向に読むので、どのように文字列a +文字列bをするのですか(かな互換性はありません私は用語だと思います)?

照合に新しい作業を追加する必要があります-強制性-私の理解では、強制性はさまざまな照合の文字列の互換性を処理することになっています。つまり、Latin1_CI_ASが特定の状況下でLatin1_CI_AIと実際に互換性を持つようにルールを設定することにより、データベースエンジンを許可する必要があります。

SQL99仕様のコピーがある場合。照合間で文字列を操作する方法を定義する照合の強制力について読んでください。MSはここMSDNでそれを定義しようとしましたが、標準と比較して十分に進んだかどうかはわかりません。多分sql2010はより良いでしょう...主題に関する私の読書が行った限り; それはまだSQL03標準にも当てはまります-私は前方計算可能性のために推測します。SQL 99のグーグルブックスのエントリには強制力に関するページがなく、MSDNの説明よりも優れたものを見つけることができません。

于 2009-05-10T14:02:13.970 に答える