Erstens wirkt sich die Änderung der Datenbanksortierung nicht auf vorhandene Tabellenspalten aus, sondern auf neu erstellte Tabellen und Spalten. Es ist die Standard-Sortierreihenfolge, die beim Erstellen neuer Objekte in der Datenbank verwendet wird.
Sie müssen also alle vorhandenen Spalten finden und die aktuelle Sortierung aktualisieren.
Sie können dies mit einem SQL-Cursor tun und alle Tabellen und Spalten abfragen und die Sortierung für einen bestimmten Typ oder Spaltennamen aktualisieren.
Ein Beispiel:
1) Sie ändern die Sortierung für zukünftige Objekte
USE master;
GO
ALTER DATABASE databasename COLLATE French_CI_AI ;
GO
2) manuelle Änderung der Spaltensortierung für eine bestimmte Spalte
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) ein Sql-Skript mit Cursor erstellen
Sie müssen entscheiden, für welche Spalte die Sortierung geändert werden soll. Dies kann nach Typ, Name oder bestimmter Tabelle erfolgen.
Sie können damit beginnen, indem Sie schauen, welche Art von Zeichen Sie haben und diese im Beispiel ersetzen, siehe die Spalte Cursor.
SELECT distinct DATA_TYPE from information_schema.columns
können Sie sich auf diesen Beitrag beziehen:
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