it-swarm.com.de

So ändern Sie die SQL Server-Sortierung

Wie kann ich die SQL Server 2008 R2 Express-Standardkollatierung für den gesamten Server und eine bestimmte Datenbank ändern?

Gibt es eine Möglichkeit, dies über die visuelle Oberfläche von SQL Server Management Studio zu tun? Im Fenster Servereigenschaften (und im entsprechenden Fenster Datenbankeigenschaften) kann diese Eigenschaft nicht bearbeitet werden.

27
rem

Ja.

Sie können die Standardkollatierung der SQL Server 2008 R2-Expressinstanz und einzelner Datenbanken ändern, dies ist jedoch eine komplexe Aufgabe.

Leider gibt es keine visuelle Möglichkeit, dies über SSMS zu tun.

SQL Server 2008 unterstützt das Festlegen von Kollatierungen auf den folgenden Ebenen:

  • Server

  • Datenbank

  • Säule

  • Ausdruck

Die Standardinstallationseinstellungen werden vom Windows-Systemgebietsschema bestimmt. Die Sortierung auf Serverebene kann entweder während des Setups oder durch Ändern des Windows-Systemgebietsschemas vor der Installation geändert werden. mehr ...

Festlegen und Ändern der Server-Sortierung - SQL Server 2008

  • Stellen Sie sicher, dass Sie über alle Informationen oder Skripte verfügen, die zum erneuten Erstellen Ihrer Benutzerdatenbanken und aller darin enthaltenen Objekte erforderlich sind.

  • Exportieren Sie alle Ihre Daten mit einem Tool wie dem Dienstprogramm bcp. Weitere Informationen finden Sie unter Importieren und Exportieren von Massendaten.

  • Löschen Sie alle Benutzerdatenbanken.

  • Erstellen Sie die Master-Datenbank ne Geben Sie die neue Sortierung in der SQLCOLLATION-Eigenschaft des Setup-Befehls an

  • Erstellen Sie alle Datenbanken und alle darin enthaltenen Objekte.

  • Importieren Sie alle Ihre Daten.

Festlegen und Ändern der Datenbanksortierung - SQL Server 2008

  • Setzen Sie die Option COLLATION in CREATE DATABASE Anweisung beim Erstellen einer neuen Datenbank.
  • In ähnlicher Weise setzen Sie die Optionen COLLATION in ALTER DATABASE Anweisung zum Ändern der Sortierung einer vorhandenen Datenbank.

    ALTER DATABASE [database_name] COLLATE SQL_Latin1_General_CP1_CI_AS;

Einstellen und Ändern der Spaltenkollatierung

  • Einige der Spaltenkollatierungen bleiben auch nach dem Ändern der Datenbankkollatierung gleich. In diesem Fall müssen Sie die Sortierung der einzelnen Spalten ändern.
25
CoderHawk

Stellen Sie sicher, dass Sie die Benutzerdatenbanken wirklich "löschen" möchten, wie in der obigen Antwort angegeben. Möglicherweise möchten Sie nur die Datenbanken "trennen". Oder Sie können wirklich nichts tun, da durch das Wiederherstellen des Masters alle Links zu den Benutzerdatenbanken effektiv entfernt werden. Es gibt Zeiten, in denen die Datenbanken in der gewünschten Sortierung erstellt werden, der Server jedoch nicht. In diesem Fall möchten Sie nicht alle Benutzerdatenbanken aus Sicherungen wiederherstellen müssen.

6
AndrewSQL

Ich habe so etwas gemacht und es hat funktioniert, aber Sie müssen berücksichtigen, dass die Indizes, die auf den Datentyp als text/varchar/nvarchar verweisen, gelöscht werden müssen, das Skript ausführen und dann die Indizes erstellen müssen.

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 

dies ist meine erste Antwort

5
Jeffry