web-dev-qa-db-ja.com

SQLで列の照合を設定する方法は?

元々、SQLServerデータベースをローカルコンピューターに作成しました。照合順序をLatin1_General_CI_AIに設定すると、すべてがうまく機能しました。完成した作業をSQLServerをホストしているWebに移動すると、問題が発生しました。それらは異なるデータベース照合順序を使用しています。だから私は今何ができますか?

具体的には、Latin1_General_CI_AIが必要ですが、Czech_CI_ASがあります。チェコ語の文字列を比較すると、これら2つは大きく異なります(正しい結果を得るには、驚くべきことに、チェコ語ではなくlatin1一般が必要です)。

データベースの照合順序を変更しようとすると、サーバーはそれを行うためのユーザー権限がないと文句を言いました。サポートデスクに連絡しようとしましたが、うまくいきませんでした。私は自分自身を助けることができますか?

テーブルの各列に独自の照合順序を設定できる可能性があることはわかっているので、すべての文字列列をLatin1_CI_AIに設定する必要があります。しかし、私はこれを行う方法がわかりません。データベースへのSQLアクセスしかありません(残念ながらSQL Server Management Studioはありません)。

15
Al Kepp

データベースの照合順序を変更するには

ALTER DATABASE MyDataBase COLLATE [NewCollation]

列の照合順序を変更するには

ALTER TABLE MyTable ALTER COLUMN Column1 [TYPE] COLLATE [NewCollation]

ただし、これを実行できるタイミングにはいくつかの制限があります。特に、列がいずれかのインデックスで使用されている場合、これは拒否されます。
場合によっては、SSMSでさらに多くのことができます。
構文ドキュメントには制限がリストされています:

21
saul672