1

質問: SQL Server で 1 つのデータベースの照合順序を切り替える効果的な方法はありますか?

プロパティ - >オプション - >照合でデータベースの照合を設定しました。この照合は新しいフィールドに対して設定されますが、データベース内の既存のテキストベースのフィールドは変更されていません。これは私が成し遂げる必要があることです。

照合を切り替える必要があるデータベースは巨大 (50 GB 以上、750 以上のテーブル) であるため、データベース内のすべてのフィールドを手動で変更することはできません。

次はどうでしょうか。

  • データベース構造のスクリプトを作成する
  • すべてのデータをエクスポート
  • データベースを削除する
  • 正しい照合順序で空のデータベースを作成する
  • データベース構造の作成 - すべてのテキストベースのフィールドをデータベースのデフォルトに設定する必要があります
  • データのインポート
  • バダビン、バダブーム?

他の戦略?

master データベースにクエリを実行して、そこで照合順序を変更できますか?

ご意見ありがとうございます。

4

2 に答える 2

1

私は以前にその問題に直面しましたが、私が見つけた唯一の方法は、save-drop-loadとそのデータベースへの入力でした。

また、あなたはすでにこのページを閲覧していると思います。

于 2012-06-08T07:49:59.113 に答える
0

おそらく、「Alter table [schema].[TableName] alter column [ColName] [type] collat​​e [New Collat​​ion] [nullability]」のような行を出力として生成する一連のクエリを作成できます。これは、組み込みの sys.Schemas、sys.Tables、および sys.Columns システム ビューを使用して行うことができます。

サンプル:

select 'alter table [' + s.name + '].[' + t.name + '] alter column [' + c.name 
    + '] nvarchar(' + CAST(c.max_length/2 as nvarchar) +') ' 
    + ' collate Finnish_Swedish_CI_AI ' 
    + (case when c.is_nullable = 1 then ' null ' else ' not null ' end) 
from sys.tables t
    join sys.schemas s on t.schema_id = s.schema_id
    join sys.columns c on t.object_id = c.object_id
where t.type='U' and c.system_type_id = 231

このサンプルは、nvarchar([length]) 型の列を検索し、alter ステートメントを生成して、照合順序を Finnish_Swedish_CI_AI に変更します。

このサンプルは概念実証のみを目的としていることに注意してください。この考えられる解決策を検討したい場合は、前述のシステム ビューの学習に時間を割く必要があります。

nvarchar、nchar、ntext および varchar、char、text フィールドを処理するために、個別のクエリを作成する必要があります。Nvarchar/Varchar(max) フィールドは、文字型の潜在的な計算列と同様に、特別な考慮が必要になる場合があります。

于 2012-06-08T08:14:50.630 に答える