サーバー全体と特定のデータベースのSQL Server 2008 R2 Express Default Collationを変更するにはどうすればよいですか?
SQL Server Management Studioのビジュアルインターフェイスを使用してそれを行う方法はありますか?[サーバーのプロパティ]ウィンドウ(および対応する[データベースのプロパティ]ウィンドウ)では、このプロパティは編集できません。
サーバー全体と特定のデータベースのSQL Server 2008 R2 Express Default Collationを変更するにはどうすればよいですか?
SQL Server Management Studioのビジュアルインターフェイスを使用してそれを行う方法はありますか?[サーバーのプロパティ]ウィンドウ(および対応する[データベースのプロパティ]ウィンドウ)では、このプロパティは編集できません。
回答:
はい。
SQL Server 2008 R2 Expressインスタンスと個々のデータベースの既定の照合順序を変更できますが、これは複雑なタスクです。
悲しいことに、SSMSを介してそれを行う視覚的なオプションはありません。
SQL Server 2008は、次のレベルで照合順序の設定をサポートしています。
サーバ
データベース
カラム
表現
デフォルトのインストール設定は、Windowsシステムロケールによって決まります。サーバーレベルの照合順序は、セットアップ中に変更するか、インストール前にWindowsシステムロケールを変更することで変更できます。もっと...
ユーザーデータベースとその中のすべてのオブジェクトを再作成するために必要なすべての情報またはスクリプトがあることを確認してください。
bcpユーティリティなどのツールを使用して、すべてのデータをエクスポートします。詳細については、バルクデータのインポートとエクスポートを参照してください。
すべてのユーザーデータベースを削除します。
setupコマンドのSQLCOLLATIONプロパティで新しい照合を指定して、masterデータベースを再構築します
すべてのデータベースとその中のすべてのオブジェクトを作成します。
すべてのデータをインポートします。
データベース照合の設定と変更-SQL Server 2008
COLLATION
中にCREATE DATABASE
ステートメントでオプションを設定します。同様COLLATION
に、ALTER DATABASE
ステートメントのオプションを設定して、既存のデータベースの照合を変更します。
ALTER DATABASE [database_name] COLLATE SQL_Latin1_General_CP1_CI_AS;
私はこのようなことをしましたが、うまくいきましたが、text / varchar / nvarcharとしてデータ型を指しているインデックスを削除し、スクリプトを実行してからインデックスを作成する必要があることに留意する必要があります。
USE YourDataBase
GO
DECLARE @Table_Name NVARCHAR(100)
SET @Table_Name = NULL--- THIS IS THE TableName that you want to change its collation columns
--- if null will set to all tables
DECLARE @TempTable AS TABLE
(
ID INT IDENTITY
,TableName NVARCHAR(100)
,ColumnName NVARCHAR(100)
,TypeName NVARCHAR(100)
,Max_length INT
,Collation_Name NVARCHAR(100)
,EnterDtm DATETIME DEFAULT GETDATE()
)
DECLARE @NewCollation NVARCHAR(100)
SET @NewCollation = 'Latin1_General_CI_AS' --- THIS IS THE COLLATION NAME THAT YOU WANT TO CHANGE
INSERT INTO @TempTable(TableName,ColumnName,TypeName,Max_length,Collation_Name)
SELECT
QUOTENAME(SCHEMA_NAME(tables.schema_id)) + '.' + QUOTENAME(tables.name) AS TableName
,all_columns.name AS ColumnName
,type_name(all_columns.user_type_id)
,all_columns.max_length
,all_columns.collation_name
from sys.all_columns INNER JOIN sys.tables ON
tables.object_id = all_columns.object_id
AND collation_name IS NOT NULL
AND all_columns.collation_name != @NewCollation
WHERE tables.object_id = ISNULL(object_id(@Table_Name),all_columns.object_id)
DECLARE @TableID SMALLINT
SET @TableID = (SELECT MIN(ID) FROM @TempTable)
DECLARE @Query NVARCHAR(1000),@TableName NVARCHAR(100),@ColumnName NVARCHAR(100),@TypeName NVARCHAR(100)
,@Size INT
WHILE @TableID IS NOT NULL
BEGIN
SET @TableName = (SELECT TableName FROM @TempTable WHERE ID = @TableID)
SET @ColumnName = (SELECT QUOTENAME(ColumnName) FROM @TempTable WHERE ID = @TableID)
SET @TypeName = (SELECT TypeName FROM @TempTable WHERE ID = @TableID)
SET @Size = (SELECT Max_length FROM @TempTable WHERE ID = @TableID)
SET @Query='ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @ColumnName + ' ' + @TypeName+ ISNULL ('(' +CAST(@Size AS VARCHAR(200))+')', '') +' COLLATE '+ @NewCollation
PRINT (@Query)
SET @TableID = (SELECT MIN(ID) FROM @TempTable WHERE ID > @TableID)
END
これは私の混乱を投稿した私の最初の答えです
すべてのデータ(ログイン、リンクサーバー、SQLエージェントジョブ、DBメール設定などを含む)をエクスポートし、インスタンスレベルのデータを再構築し、さらにすべてのユーザーデータを再ロードするのは、大変な作業です。そして、それでもALTER DATABASE
、操作の完了を妨げる条件がいくつかあるため、データベースのデフォルトの照合を更新できる保証はありません(詳細については、ALTER DATABASE
ドキュメントの「データベース照合の変更」セクションを参照してください) 。
ただし、ドキュメント化されていない方法の方がはるかに簡単です。主な欠点は、サポートされていないことです。これは、何かがうまくいかないと言うことではなく、何か問題が発生しても、マイクロソフトは修正を支援しません(動作することを保証しなかったため)。
私が話す方法はsqlservr.exe
、-q {new_collation_name}
スイッチで実行しています。それ以上のことがありますが、それは基本的な考え方です。このメソッドは、システムメタデータを更新するだけで、利点と結果があります。主なものは次のとおりです。
利点
ALTER DATABASE
動作を妨げるほとんどの制限を回避するドローバック
VARCHAR
データができるコードページは、古いものと新しい照合順序の間で異なっている、場合には、変更および 255(0x80と- -の0xFF)128の値を持つ文字が存在し、そしてそれらの文字は、新しいコードに同じ値で同じ文字として存在しません。ページ。そのため、データ損失の可能性があります。この状態が存在しないことを確認するには、まずデータを調査する必要があります。ただし、これは、コードページが変更された場合でも、0〜127の値を持つ文字のみが危険ではない場合が多くあることも意味します。sqlservr.exe -q
メソッドが行うことと行わないことの詳細な説明(さまざまなレベルでの照合の動作の詳細、および注意すべき潜在的な問題を含む)については、私の投稿を参照してください。
インスタンス、データベース、およびすべてのユーザーデータベースのすべての列の照合順序を変更する:何が間違っている可能性がありますか?
(システム・データベースを含む:唯一のインスタンスを変更するにはmaster
、model
、msdb
、およびtempdb
)、および1つ以上のデータベース(ただし、すべてのデータベース)、単にあなたがこの操作から除外するというデータベースをデタッチし、それらを再取り付け照合の更新が完了すると。