まず、データベースの照合順序を変更しても、テーブル内の既存の列には影響しませんが、新しく作成されたテーブルと列には影響します。これは、データベースに新しいオブジェクトを作成するときに使用するデフォルトの照合です。
したがって、既存のすべての列を見つけて、現在の照合順序を更新する必要があります。
SQLカーソルを使用してそれを実行し、すべてのテーブルと列をクエリして、特定のタイプまたは列名の照合を更新できます。
例によって:
1)将来のオブジェクトの照合を変更します
USE master;
GO
ALTER DATABASE databasename COLLATE French_CI_AI ;
GO
2)特定の列の列照合を手動で変更します
ALTER TABLE tablenameX ALTER COLUMN LastName varchar(100) COLLATE French_CI_AI NULL
ALTER TABLE tablenameY ALTER COLUMN FirstName varchar(100) COLLATE French_CI_AI NULL
3) カーソルを使用して SQL スクリプトを生成する
照合順序を変更する列を決定する必要があります。タイプ、名前、または特定のテーブルごとに指定できます。
あなたが持っている文字タイプのタイプを見て、例でそれらを置き換えることから始めることができます。列カーソルを参照してください。
information_schema.columns から個別の DATA_TYPE を選択します
この投稿を参照できます:
http://www.codeproject.com/Articles/302405/The-Easy-way-of- changing-Collation-of-all-Database
declare @CollationName as nvarchar = 'Latin1_General_CI_AS'
declare @tablename as nvarchar(100) = ''
declare @sqltext as nvarchar(100) = ''
declare @columnname as nvarchar(200) = ''
declare @DataType as nvarchar(100) = ''
declare @CharacterMaxLen as int = 0
declare @IsNullable as bit = 0
DECLARE MyTableCursor Cursor
FOR
SELECT * from information_schema.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
OPEN MyTableCursor
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE MyColumnCursor Cursor
FOR
SELECT COLUMN_NAME,DATA_TYPE, CHARACTER_MAXIMUM_LENGTH,
IS_NULLABLE from information_schema.columns
WHERE table_name = @TableName AND (Data_Type LIKE '%char%'
OR Data_Type LIKE '%text%') AND COLLATION_NAME <> @CollationName
ORDER BY ordinal_position
Open MyColumnCursor
FETCH NEXT FROM MyColumnCursor INTO @ColumnName, @DataType,
@CharacterMaxLen, @IsNullable
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLText = 'ALTER TABLE ' + @TableName + ' ALTER COLUMN [' + @ColumnName + '] ' +
@DataType + '(' + CASE WHEN @CharacterMaxLen = -1 THEN 'MAX' ELSE @CharacterMaxLen END +
') COLLATE ' + @CollationName + ' ' +
CASE WHEN @IsNullable = 'NO' THEN 'NOT NULL' ELSE 'NULL' END
PRINT @SQLText
FETCH NEXT FROM MyColumnCursor INTO @ColumnName, @DataType,
@CharacterMaxLen, @IsNullable
END
CLOSE MyColumnCursor
DEALLOCATE MyColumnCursor
FETCH NEXT FROM MyTableCursor INTO @TableName
END
CLOSE MyTableCursor
DEALLOCATE MyTableCursor