SQL Serverデータベースの照合順序を変更する

別の照合順序を使用するようにデータベースを変更する必要が

次のスニペットを使用してこれを行うことができます:

USE master;GOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS ;GO--Verify the collation setting.SELECT name, collation_nameFROM sys.databasesWHERE name = N'';GO

上記のスニペットを実行すると、次のエラーが発生する可能性があります。

the database could not be exclusively lock to perform the operation

このエラーは、データベースがマルチユーザモードにある場合、またはデータベースを参照するオブジェクトがある場合に発生します。

このエラーを解決するには、次の手順を実行する必要があります:

  1. データベースをシングルユーザモードに設定します。
  2. データベースに必要な変更を実行します。この場合は照合順序を変更します。
  3. データベースをマルチユーザモードに戻します。

だから、上記のスニペットは次のスニペットに更新することができます:

USE master;GO-- Set to single-user modeALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGO -- change collationALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GO -- Set to multi-user modeALTER DATABASE SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO --Verify the collation setting. SELECT name, collation_name FROM sys.databases WHERE name = N'MyOptionsTest'; GO

上記のプロセスは、目的のデータベース照合を設定せずに、内部にデータがない新しいデータベースを作成したばかりの場合に使用できます。データベースには、照合順序が異なるテーブル列、つまりchar、varchar、text、nchar、nvarchar、およびntext型のテーブル列がある可能性があります。 現在の照合順序を持つすべてのテーブル列を一覧表示するには、次のクエリを実行します:

SELECT t.name, c.name, c.collation_nameFROM sys.columns c INNER JOIN sys.tables t ON t.object_id = c.object_idWHERE c.object_id IN (SELECT object_id FROM sys.objects WHERE type = 'U') AND c.collation_name != 'NULL'ORDER BY t.name, c.name

これらの列の照合順序を変更する前に、変更によってアプリケーションに問題が発生するかどうかを確認する必要があります。

列の照合順序を新しい照合順序に変更するには、次のクエリを実行します:

ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>

エラーが発生した場合は、参照元の制約とインデックスが削除されていることを確認してください。

照合順序と既存のデータの変更

既存のデータはどうですか? 照合順序を変更した後に既存のデータを確実に取得できるようにするには、次の手順を実行する必要があります:

  1. SQL Serverデータのインポートとエクスポートウィザードまたはbcpを使用して、
  2. テーブルを削除して再作成し、
  3. 以前にエクスポートしたデータをインポートします。

次の例では、照合LATIN1_GENERAL_CI_AIを使用してデータベースを作成し、列名(nvarchar(50))を持つテーブルProductsを追加し、ギリシャ語でデータを挿入します。

CREATE DATABASE COLLATE LATIN1_GENERAL_CI_AI;-- -- Create Products table and add some dataUSE GOCREATE TABLE .( (50) NULL) ON GOinsert into dbo.Products (name) values (N'Προϊόν 1');insert into dbo.Products (name) values (N'Προϊόν 2');insert into dbo.Products (name) values (N'Προϊόν 3');insert into dbo.Products (name) values (N'Προϊόν 4');insert into dbo.Products (name) values (N'Προϊόν 5');

“Π”(製品のギリシャ語)で始まるすべての製品を探して、5つの結果が得られます:

SELECT *FROM dbo.ProductsWHERE Name LIKE N'Προϊόν%';-- Results:Name--------------------------------------------------Προϊόν 1Προϊόν 2Προϊόν 3Προϊόν 4Προϊόν 5

ステップ1. データのエクスポート

bulk copy program utility(bcp)の略で、Microsoft SQL Serverのインスタンスとユーザー指定の形式でデータファイルとの間でデータを一括コピーするbcpを使用して、Productsテーブル このユーティリティを使用して、大量の新しい行をSQL Serverテーブルにインポートしたり、テーブルからデータをadataファイルにエクスポートしたりできます。 これを行うには、次のコマンドが必要です:

bcp CollationTest.dbo.Products out Products.txt -c -T

ここで、-cは文字データ型を使用して操作を実行し、-Tは、bcpユーティリティが統合セキュリティを使用して信頼された接続でSQL Serverに接続することを指定します。

ステップ2。 データベース照合順序の変更

次のステップでは、次のステートメントを使用して、データベース照合順序をGREEK_CI_AIに変更します:

-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;

ステップ3. Productsテーブル

USE GODROP TABLE .;GOCREATE TABLE .( (50) NULL) ON GO

を削除して再作成します。 以前にエクスポートしたデータをインポートする

これを行うには、再びbcpユーティリティを使用しますが、outパラメータの代わりにinパラメータを使用します:

bcp CollationTest.dbo.Products in Products.txt -c -T

コメントを残す

メールアドレスが公開されることはありません。