Freigeben über


Festlegen oder Ändern der Spaltensortierung

Sie können die Datenbanksortierung für char, , varchar, text, ncharund nvarcharntext Daten überschreiben, indem Sie eine andere Sortierung für eine bestimmte Spalte einer Tabelle angeben und eine der folgenden Verwenden:

  • Die COLLATE-Klausel von CREATE TABLE und ALTER TABLE. Beispiel:

    CREATE TABLE dbo.MyTable  
      (PrimaryKey   int PRIMARY KEY,  
       CharCol      varchar(10) COLLATE French_CI_AS NOT NULL  
      );  
    GO  
    ALTER TABLE dbo.MyTable ALTER COLUMN CharCol  
                varchar(10)COLLATE Latin1_General_CI_AS NOT NULL;  
    GO  
    
  • SQL Server Management Studio: Weitere Informationen, Sortierung und Unicode-Unterstützung.

  • Verwenden der Column.Collation Eigenschaft in SQL Server Management Objects (SMO).

Sie können die Sortierung einer Spalte nicht ändern, wenn sie derzeit von einem der folgenden Elemente referenziert wird:

  • Eine berechnete Spalte

  • Ein Index.

  • Verteilungsstatistiken, die entweder automatisch oder durch die CREATE STATISTICS-Anweisung generiert werden

  • EINE CHECK-Einschränkung

  • Eine Fremdschlüsseleinschränkung

Wenn Sie mit tempdb arbeiten, enthält die COLLATE-Klausel eine database_default Option, um anzugeben, dass eine Spalte in einer temporären Tabelle den Sortierstandard der aktuellen Benutzerdatenbank für die Verbindung anstelle der Sortierung von tempdb verwendet.

Kollationen und Textspalten

Sie können Werte in eine text Spalte einfügen oder aktualisieren, deren Sortierung sich von der Codepage der Standardsortierung der Datenbank unterscheidet. SQL Server konvertiert die Werte implizit in die Kollation der Spalte.

Sortierungen und tempdb

Die tempdb-Datenbank wird jedes Mal erstellt, wenn SQL Server gestartet wird und die gleiche Standardsortierung wie die Modelldatenbank aufweist. Dies entspricht in der Regel der Standardsortierung der Instanz. Wenn Sie eine Benutzerdatenbank erstellen und eine andere Standardsortierung als das Modell angeben, weist die Benutzerdatenbank eine andere Standardsortierung als tempdb auf. Alle temporären gespeicherten Prozeduren oder temporäre Tabellen werden in tempdb erstellt und gespeichert. Dies bedeutet, dass alle impliziten Spalten in temporären Tabellen und alle koerzierbaren Standardkonstanten, Variablen und Parameter in temporären gespeicherten Prozeduren Sortierungen aufweisen, die sich von vergleichbaren Objekten unterscheiden, die in permanenten Tabellen und gespeicherten Prozeduren erstellt wurden.

Dies kann zu Problemen mit einer Diskrepanz in den Sortiereinstellungen zwischen benutzerdefinierten Datenbanken und Systemdatenbankobjekten führen. Beispielsweise verwendet eine Instanz von SQL Server die Latin1_General_CS_AS Sortierung, und Sie führen die folgenden Anweisungen aus:

CREATE DATABASE TestDB COLLATE Estonian_CS_AS;  
USE TestDB;  
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );  

In diesem System verwendet die tempdb-Datenbank die Latin1_General_CS_AS Sortierung mit Codepage 1252, und TestDB sowie TestPermTab.Col1 verwenden die Estonian_CS_AS Sortierung mit Codepage 1257. Beispiel:

USE TestDB;  
GO  
-- Create a temporary table with the same column declarations  
-- as TestPermTab  
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar );  
INSERT INTO #TestTempTab  
         SELECT * FROM TestPermTab;  
GO  

Im vorherigen Beispiel verwendet die tempdb-Datenbank die Latin1_General_CS_AS Sortierung, und sowohl TestDB als auch TestTab.Col1 verwenden die Estonian_CS_AS Sortierung. Beispiel:

SELECT * FROM TestPermTab AS a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1;  

Da tempdb die Standardsortierung des Servers verwendet und TestPermTab.Col1 eine andere Sortierung verwendet, gibt SQL Server diesen Fehler zurück: "Der Sortierungskonflikt zwischen 'Latin1_General_CI_AS_KS_WS' und 'Estonian_CS_AS' kann nicht aufgelöst werden."

Um den Fehler zu verhindern, können Sie eine der folgenden Alternativen verwenden:

  • Geben Sie an, dass die temporäre Tabellenspalte die Standardsortierung der Benutzerdatenbank verwendet, nicht tempdb. Dadurch kann die temporäre Tabelle mit ähnlich formatierten Tabellen in mehreren Datenbanken verwendet werden, wenn dies für Ihr System erforderlich ist.

    CREATE TABLE #TestTempTab  
       (PrimaryKey int PRIMARY KEY,  
        Col1 nchar COLLATE database_default  
       );  
    
  • Geben Sie die richtige Sortierung für die #TestTempTab Spalte an:

    CREATE TABLE #TestTempTab  
       (PrimaryKey int PRIMARY KEY,  
        Col1 nchar COLLATE Estonian_CS_AS  
       );  
    

Siehe auch

Festlegen oder Ändern der Serversortierung
Festlegen oder Ändern der Datenbanksortierung
Sortierung und Unicode-Unterstützung