Festlegen oder Ändern der Datenbanksortierung

Gilt für:SQL ServerAzure SQL Managed Instance

In diesem Artikel wird beschrieben, wie Sie die Datenbanksortierung mithilfe von SQL Server Management Studio (SSMS) oder Transact-SQL festlegen oder ändern. Wenn keine Sortierung angegeben wird, wird die Serversortierung verwendet.

Einschränkungen

  • Nur-Unicode-Sortierungen unter Windows können nur mit der COLLATE-Klausel verwendet werden, um auf Spalten- und Ausdrucksebene Sortierungen auf die Datentypen nchar, nvarchar und ntext anzuwenden. Sie können nicht mit der COLLATE-Klausel verwendet werden, um die Sortierung einer Datenbank oder Serverinstanz zu ändern.

  • Wenn die angegebene Sortierung oder die Sortierung des Objekts, auf das verwiesen wird, eine Codepage verwendet, die nicht von Windows unterstützt wird, zeigt die Datenbank-Engine einen Fehler an.

  • Die Sortierung auf Serverebene in der verwalteten Azure SQL-Instanz kann beim Erstellen der Instanz festgelegt werden. Sie kann später nicht mehr geändert werden. Weitere Informationen finden Sie unter Festlegen oder Ändern der Serversortierung.

Wichtig

Die ALTER DATABASE COLLATE-Anweisung wird in Azure SQL-Datenbank nicht unterstützt. Geben Sie datenbanksortierung und Katalogsortierung zum Zeitpunkt von CREATE DATABASE an.

Empfehlungen

Die Namen der unterstützten Sortierungen finden Sie unter Name der Windows-Sortierung (Transact-SQL) und SQL Server-Sortierungsname (Transact-SQL). Alternativ können Sie die Systemfunktion sys.fn_helpcollations (Transact-SQL) verwenden.

Das Ändern der Datenbanksortierung ändert Folgendes:

  • Alle char-, varchar-, text-, nchar-, nvarchar- und ntext -Spalten in Systemtabellen erhalten die neue Sortierung.

  • Sämtliche vorhandene char-, varchar-, text-, nchar-, nvarchar- und ntext -Parameter und skalare Rückgabewerte für gespeicherte Prozeduren und benutzerdefinierte Funktionen erhalten die neue Sortierung.

  • Die Systemdatentypen char, varchar, text, ncharoder nvarcharoder ntext sowie alle benutzerdefinierten Datentypen, die auf Systemdatentypen basieren, erhalten die neue Standardsortierung.

Sie können die Sortierung neuer Objekte, die in einer Benutzerdatenbank erstellt werden, mithilfe der COLLATE-Klausel der ALTER DATABASE-Anweisung ändern. Diese Anweisung ändert jedoch nicht die Sortierung der Spalten in vorhandenen benutzerdefinierten Tabellen. Letztere können mithilfe der COLLATE-Klausel der ALTER TABLE-Anweisung geändert werden.

Wichtig

Durch das Ändern der Sortierung einer Datenbank oder einzelner Spalten werden nicht die zugrunde liegenden Daten geändert, die bereits in vorhandenen Tabellen gespeichert sind. Wenn Ihre Anwendung nicht explizit für die Datenkonvertierung und den Vergleich zwischen verschiedenen Sortierungen zuständig ist, wird empfohlen, dass Sie die in der Datenbank vorhandenen Daten in die neue Sortierung übertragen. Dadurch entfällt das Risiko, dass Anwendungen Daten möglicherweise falsch ändern, was zu falschen Ergebnissen oder einem stillen Datenverlust führen kann.

Wenn die Sortierung einer Datenbank geändert wird, erben nur neue Tabellen standardmäßig die neue Datenbanksortierung. Es gibt einige Alternativen zum Konvertieren vorhandener Daten in die neue Sortierung:

  • Konvertieren Sie die Daten direkt. Informationen zum Konvertieren der Sortierung einer Spalte in einer vorhandenen Tabelle finden Sie unter Festlegen oder Ändern der Spaltensortierung. Dieser Vorgang ist leicht zu implementieren, kann jedoch bei großen Tabellen und ausgelasteten Anwendungen zu einem Blockierproblem führen. Das folgende Beispiel zeigt eine direkte Konvertierung der MyString-Spalte in eine neue Sortierung:

    ALTER TABLE dbo.MyTable
        ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    
  • Kopieren Sie die Daten in neue Tabellen, die die neue Sortierung verwenden, und ersetzen Sie die ursprünglichen Tabellen in derselben Datenbank. Erstellen Sie eine neue Tabelle in der aktuellen Datenbank, die die Datenbanksortierung erbt, kopieren Sie die Daten von der alten Tabelle in die neue Tabelle, löschen Sie die ursprüngliche Tabelle, und ändern Sie den Namen der neuen Tabelle in den der ursprünglichen. Hierbei handelt es sich um einen schnelleren Vorgang als eine direkte Konvertierung, der allerdings zu einer Herausforderung werden kann, wenn komplexe Schemas mit Abhängigkeiten wie Fremdschlüsseleinschränkungen, Primärschlüsseleinschränkungen und Triggern beteiligt sind. Darüber hinaus ist vor der endgültigen Trennung eine abschließende Datensynchronisierung zwischen der ursprünglichen und der neuen Tabelle erforderlich, wenn die Daten weiterhin von Anwendungen geändert werden. Das folgende Beispiel zeigt eine Konvertierung der MyString-Spalte in eine neue Sortierung durch Kopieren und Ersetzen:

    CREATE TABLE dbo.MyTable2 (MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8); 
    
    INSERT INTO dbo.MyTable2 
    SELECT * FROM dbo.MyTable; 
    
    DROP TABLE dbo.MyTable; 
    
    EXEC sp_rename 'dbo.MyTable2', 'dbo.MyTable';
    
  • Kopieren Sie die Daten in eine neue Datenbank, die die neue Sortierung verwendet, und ersetzen Sie die ursprüngliche Datenbank. Erstellen Sie eine neue Datenbank mit der neuen Sortierung, und übertragen Sie die Daten aus der ursprünglichen Datenbank mithilfe von Tools wie den Integration Services oder dem Import/Export-Assistenten im SQL Server Management Studio. Dies ist ein einfacherer Ansatz für komplexe Schemas. Darüber hinaus ist vor der endgültigen Trennung eine abschließende Datensynchronisierung zwischen den ursprünglichen und den neuen Datenbanken erforderlich, wenn die Daten weiterhin von Anwendungen geändert werden.

Berechtigungen

Um eine neue Datenbank zu erstellen, benötigen Sie CREATE DATABASE die Berechtigung in der master Datenbank oder die CREATE ANY DATABASEBerechtigung , oder ALTER ANY DATABASE .

Zum Ändern der Sortierung einer vorhandenen Datenbank ist die Berechtigung ALTER für die Datenbank erforderlich.

Festlegen oder Ändern der Datenbanksortierung mit dem SSMS

  1. Stellen Sie im Objekt-Explorereine Verbindung mit einer Instanz von SQL Server-Datenbank-Engineher, erweitern Sie diese Instanz und dann Datenbanken.

  2. Wenn Sie eine neue Datenbank erstellen, klicken mit der rechten Maustaste auf Datenbanken und dann auf Neue Datenbank. Wenn Sie die Standardsortierung nicht verwenden möchten, navigieren Sie zur Seite Optionen, und wählen Sie eine Sortierung aus der Dropdownliste Sortierung aus.

    Wenn eine Datenbank bereits vorhanden ist, können Sie alternativ mit der rechten Maustaste auf die zu ändernde Datenbank und dann auf Eigenschaften klicken. Navigieren Sie zur Seite Optionen, und wählen Sie eine Sortierung aus der Dropdownliste Sortierung aus.

  3. Wenn Sie fertig sind, klicken Sie auf OK.

Festlegen der Datenbanksortierung mithilfe von Transact-SQL

  1. Stellen Sie eine Verbindung mit dem Datenbank-Engineher.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. In diesem Beispiel wird gezeigt, wie die COLLATE-Klausel in CREATE DATABASE verwendet wird, um einen Sortierungsnamen anzugeben. Im folgenden Beispiel wird die Datenbank mit dem Namen MyOptionsTest erstellt, die die Sortierung Latin1_General_100_CS_AS_SC verwendet. Nachdem Sie die Datenbank erstellt haben, führen Sie die SELECT -Anweisung aus, um die Einstellung zu überprüfen.

USE master;  
GO

IF DB_ID (N'MyOptionsTest') IS NOT NULL  
    DROP DATABASE MyOptionsTest;  
GO

CREATE DATABASE MyOptionsTest  
    COLLATE Latin1_General_100_CS_AS_SC;  
GO  
  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'MyOptionsTest';  
GO  

Ändern der Datenbanksortierung mithilfe von Transact-SQL

  1. Stellen Sie eine Verbindung mit dem Datenbank-Engineher.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. In diesem Beispiel wird gezeigt, wie die COLLATE-Klausel in einer ALTER DATABASE-Anweisung verwendet wird, um den Sortierungsnamen zu ändern. Führen Sie die SELECT -Anweisung aus, um die Änderung zu überprüfen.

USE master;  
GO

ALTER DATABASE MyOptionsTest  
    COLLATE French_CI_AS ;  
GO  
  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'MyOptionsTest';  
GO  

Nächste Schritte

Weitere Informationen zur Sortierung: