SQL Serverの照合順序を変更する

SQL Serverでは文字列比較の基準となる照合順序が設定できる。
例えば「大文字小文字を区別する」等である。

これはデータベース毎に設定可能で、特に指定していない場合はSQL Serverセットアップ時に設定したサーバーデフォルト値が適用される。

デフォルトと異なる照合順序をデータベースに設定した場合、トラブルが発生しやすい。
例えば、一時テーブルと作成し、それとデータベース内のテーブルをJOINするようなクエリはエラーになる。
これは、一時テーブルの照合順序はサーバーのデフォルト値になっており、
異なる照合順序でのon Table.col1=temptable.col1という比較が行えないためである。
on Table.col1=temptable.col1 collate Japanese_CI_ASのように、クエリの中で照合順序を指定すればエラーは発生しない。)

仕事の都合で照合順序の変更を余儀なくされたことがあったので、その手順をメモする。
なお、実際に行ったのはSQL Server 2012だが、2008 R2や2014でも同じだと思う。

・データベース単体の照合順序変更方法

以下のクエリを実行すれば良い。
対象のデータベース名をSampleDataBase、照合順序をJapanese_CI_AS_KS_WSとする。

・SQL Server(=システムデータベース)の照合順序変更方法

データベースが存在すると実行できないため、システムデータベースを除く全てのデータベースを削除する。
(復元が必要な場合はバックアップをとっておく。)

SQLのインストールディレクトリ内にSetup.exeがあるので、そこに移動する。
規定ではC:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\Releaseである。
コマンドプロンプトからSetup.exeを以下のコマンドで実行する。

例えば、インスタンス名は規定のMSSQLSERVER、Windows認証でAdministratorがSQL Serverにログイン可能で、
照合順序をJapanese_CI_AS_KS_WSに変更したい場合は以下のようなコマンドを実行する。


なお、実行できない場合、インストールメディアのSetup.exeで試すとうまくいく場合がある。
理由は不明で、偶然かもしれないが、そういう場合もあった。


参考
データベースの照合順序の設定または変更
システム データベースの再構築