【SQLServer】データベースの照合順序を変更する

最終更新日:2022‐12-29

.net MVC5+SQLServerで作成する際に、データベースの照合順序をうっかり途中で変更すると以下のようなエラーが発生してしまいます。

equal to 操作の "Japanese_XJIS_100_CS_AS_KS_WS" と "Japanese_CI_AS" 間での照合順序の競合を解決できません。

これは、データベースの照合順序後に作成したテーブルは、データベースの照合順序設定を引き継いで生成されるためで、変更前と変更後のテーブルの照合順序が異なるために発生するエラーです。

データベースの照合順序を変更するSQLは以下のとおりです。
照合順序を変更後、テーブルを再作成することで照合順序を合わせることができます。
要はテーブルを作り直しています。

----------------------
-- データベースの照合順序を確認
----------------------
USE master;

SELECT name, collation_name FROM sys.databases;
GO  

----------------------
-- データベースの照合順序を変更
----------------------
ALTER DATABASE HOGE_DATABASE
COLLATE Japanese_XJIS_100_CS_AS_KS_WS ;  
GO 

----------------------
-- データベースの照合順序を再確認
----------------------
SELECT name, collation_name FROM sys.databases;

----------------------
-- テーブルバックアップを取って、テーブルを作り直す
----------------------
SELECT * INTO TableHoge_bk from TableHoge;
DROP TABLE TableHoge;

CREATE TABLE [dbo].[TableHoge](
	[HogeCode] [char](2) NOT NULL,
	[HogeName] [nvarchar](128) NOT NULL
);

----------------------
-- 新しく作ったテーブルにバックアップからデータを入れ直す
----------------------
INSERT INTO TableHoge SELECT * FROM TableHoge_bk;

オフィシャルドキュメント

●照合順序の表示
https://docs.microsoft.com/ja-jp/sql/relational-databases/collations/view-collation-information?view=sql-server-ver15

●照合順序の変更
https://docs.microsoft.com/ja-jp/sql/relational-databases/collations/set-or-change-the-database-collation?view=sql-server-ver15

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です