web-dev-qa-db-ja.com

SQL Serverデータベースの照合順序を変更するにはどうすればよいですか?

私は単一の照合-Latin1_General_CI_AS(標準照合)ですべてのデータベースを標準化しようとしています。 SQL_Latin1_General_CP1_CI_ASにあるデータベースがいくつかあります。

ALTER DATABASEを使用してデータベースの照合順序を変更できることはわかっていますが、これは新しいオブジェクトにのみ影響します。私の理解では、既存の列を変更する唯一の方法は、すべてのテーブルの各列でALTER COLUMNを実行することです。それを行うには、すべてのインデックスを削除して再作成する必要があります。

私はそれがこのようなものになると思います:

DROP INDEX indexname ON tablename

GO

ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL

GO

CREATE CLUSTERED INDEX indexname ON tablename (columname ASC)

データベース全体のすべてのvarchar、char、text、nvarchar、nchar、ntext列について繰り返します。 巨大 SQLスクリプトになります。

これを行う簡単な方法はありますか、それを行うSQLスクリプトの作成を自動化する方法を誰かが提案できますか?

16
Richard Gadsden

MS KB 325335 には、db全体とすべての列に対してこれを行う方法に関するオプションがあります。

基本的に:

  1. スクリプトデータベーステーブル(新しい照合を使用)
  2. DTS/SSISデータ(照合の監視)
  3. 制約を追加する
9
gbn

調整が必要かもしれませんが、「SQL Server 2000 Collat​​ion Changer」ユーティリティを使用して成功しました: http://www.codeproject.com/KB/database/ChangeCollat​​ion.aspx

3
user2934

残念ながら、これはSQL Serverでは簡単な作業ではありません。

RedgateのSQL Compareなどのスクリプトツールを既存のデータベースオブジェクト(テーブル、ストアドプロシージャ、ビューなど)に使用できます。ライセンスがない場合は、無料の試用版を使用できます。適切な照合で新しいデータベースを作成し、スクリプトからオブジェクトを再構築したら、SSISを実行して、あるデータベースから別のデータベースにデータを転送できます。大量のデータがある場合は、T-SQL一括挿入を使用します。

そのサーバー上の将来のデータベースに適切な照合を行うために、サーバーのデフォルトの照合を変更できます。次のMSDN記事では、ALTER DATABASEおよびALTER TABLEのCOLLATE句を使用してどのような変更が行われるかを説明しています。

データベース照合の設定と変更(SQL Server 2008 Books Online)

ALTER DATABASE ステートメントのCOLLATE句を使用して、ユーザーデータベースに作成される新しいオブジェクトの照合順序を変更できます。このステートメントは、既存のユーザー定義テーブルの列の照合順序を変更しません。これらは ALTER TABLE のCOLLATE句を使用して変更できます。

データベースの照合順序を変更すると、以下が変更されます。

  • データベースのデフォルトの照合。この新しいデフォルトの照合は、その後データベースで作成されるすべての列、ユーザー定義のデータ型、変数、およびパラメーターに適用されます。また、SQLステートメントで指定されたオブジェクト識別子を、データベースで定義されたオブジェクトに対して解決するときにも使用されます。
  • システムテーブルのchar、varchar、text、nchar、nvarchar、またはntext列はすべて、新しい照合順序に変更されます。
  • ストアドプロシージャとユーザー定義関数の既存のchar、varchar、text、nchar、nvarchar、またはntextパラメータとスカラー戻り値はすべて、新しい照合順序に変更されます。
  • Char、varchar、text、nchar、nvarchar、またはntextシステムデータ型、およびこれらのシステムデータ型に基づくすべてのユーザー定義データ型は、新しい既定の照合順序に変更されます。
2
splattne

このユーティリティを試す 、ソースデータベースを指定すると、ターゲットデータベースに適用する必要があるすべてのスクリプトが生成されるため、照合順序が安全に変更されます。

1
Manea Florin

通常、これをライブサーバーに対して行うことはお勧めしません。私が最後に見たとき、これを行うことはマイクロソフトによって公式にサポートされていませんでした。実際にこれを行うには、正しい照合を使用して新しいインスタンスを作成し、それにデータベースを移行する必要があります。

Tempdbには新しいサーバーの照合順序が含まれるため、デフォルトの照合順序が異なるサーバーにDBを復元すると、あらゆる種類の楽しみが生じます。これもお勧めしません。

Infomation_Schemaビューを使用してスクリプトを簡単に生成できますが、これが問題を解決するための最良の方法であるかどうかはわかりません。大量のデータベースですべてのインデックスを再作成すると、膨大な時間/ログ領域がかかる可能性があります。新しいインスタンスへの移行(復元ではない)を行います。

1
Dave Jackson