Festlegen oder Ändern der SpaltensortierungSet or Change the Column Collation

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Sie können die Datenbanksortierung für char-, varchar-, text-, nchar-, nvarchar- und ntext -Daten überschreiben, indem Sie eine andere Sortierung für eine bestimmte Spalte einer Tabelle angeben und dann eine der folgenden Optionen verwenden:You can override the database collation for char, varchar, text, nchar, nvarchar, and ntext data by specifying a different collation for a specific column of a table and using one of the following:

  • Die COLLATE-Klausel von CREATE TABLE und ALTER TABLE.The COLLATE clause of CREATE TABLE and ALTER TABLE. Zum Beispiel:For example:

    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 StudioSQL Server Management Studio.. Weitere Informationen finden Sie unter Collation and Unicode Support.For more information, Collation and Unicode Support.

  • Die Column.Collation -Eigenschaft in SQL ServerSQL Server Management Objects (SMO).Using the Column.Collation property in SQL ServerSQL Server Management Objects (SMO).

Sie können die Sortierung einer Spalte nicht ändern, wenn folgende Objekte aktuell auf die Spalte verweisen:You cannot change the collation of a column that is currently referenced by any one of the following:

  • Eine berechnete Spalte.A computed column

  • Ein Index.An index

  • Verteilungsstatistiken, die entweder automatisch oder mithilfe der CREATE STATISTICS-Anweisung generiert wurden.Distribution statistics, either generated automatically or by the CREATE STATISTICS statement

  • Eine CHECK-Einschränkung.A CHECK constraint

  • Eine FOREIGN KEY-Einschränkung.A FOREIGN KEY constraint

Wenn Sie tempdbverwenden, enthält die COLLATE -Klausel eine database_defauls -Option, mit der angegeben werden kann, dass für eine Spalte einer temporären Tabelle anstelle der Sortierung von tempdbdie Standardsortierung der aktuellen Benutzerdatenbank für die Verbindung verwendet wird.When you work with tempdb, the COLLATE clause includes a database_default option to specify that a column in a temporary table uses the collation default of the current user database for the connection instead of the collation of tempdb.

Sortierungen und text-SpaltenCollations and text Columns

Sie können Werte in einer text -Spalte einfügen und aktualisieren, deren Sortierung sich von der Codepage der Standardsortierung der Datenbank unterscheidet.You can insert or update values in a text column whose collation is different from the code page of the default collation of the database. SQL ServerSQL Server werden die Werte implizit in die Sortierung der Spalte konvertiert. implicitly converts the values to the collation of the column.

Sortierungen und tempdbCollations and tempdb

Die tempdb -Datenbank wird bei jedem Start von SQL ServerSQL Server erstellt und weist die gleiche Standardsortierung wie die model -Datenbank auf.The tempdb database is built every time SQL ServerSQL Server is started and has the same default collation as the model database. Dabei handelt es sich normalerweise um die gleiche Sortierung wie die Standardsortierung der Instanz.This is typically the same as the default collation of the instance. Wenn Sie eine Benutzerdatenbank erstellen und eine andere Standardsortierung als für die model-Datenbank angeben, verwendet die Benutzerdatenbank eine andere Standardsortierung als die tempdb-Datenbank.If you create a user database and specify a different default collation than model, the user database has a different default collation than tempdb. Alle temporären gespeicherten Prozeduren oder temporären Tabellen werden in tempdberstellt und gespeichert.All temporary stored procedures or temporary tables are created and stored in tempdb. Dies bedeutet, dass alle impliziten Spalten in temporären Tabellen und alle Konstanten, Variablen und Parameter mit erzwingbaren Standards in temporär gespeicherten Prozeduren andere Sortierungen aufweisen als die vergleichbaren Objekte, die in dauerhaften Tabellen und gespeicherten Prozeduren erstellt werden.This means that all implicit columns in temporary tables and all coercible-default constants, variables, and parameters in temporary stored procedures have collations that are different from comparable objects created in permanent tables and stored procedures.

Dies kann zu Problemen hinsichtlich einer Nichtübereinstimmung in Sortierungen zwischen benutzerdefinierten Datenbanken und Systemdatenbankobjekten führen.This could lead to problems with a mismatch in collations between user-defined databases and system database objects. Eine Instanz von SQL ServerSQL Server verwendet z. B. die Latin1_General_CS_AS-Sortierung, und Sie führen die folgenden Anweisungen aus:For example, an instance of SQL ServerSQL Server uses the Latin1_General_CS_AS collation and you execute the following statements:

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 und TestPermTab.Col1 verwenden die Estonian_CS_AS -Sortierung mit Codepage 1257.In this system, the tempdb database uses the Latin1_General_CS_AS collation with code page 1252, and TestDB and TestPermTab.Col1 use the Estonian_CS_AS collation with code page 1257. Zum Beispiel:For example:

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 TestDB und TestTab.Col1 verwenden die Estonian_CS_AS -Sortierung.With the previous example, the tempdb database uses the Latin1_General_CS_AS collation, and TestDB and TestTab.Col1 use the Estonian_CS_AS collation. Zum Beispiel:For example:

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

Da tempdb die Standardserversortierung und TestPermTab.Col1 eine andere Sortierung verwendet, wird in SQL Server der folgende Fehler zurückgegeben: „Ein Sortierungskonflikt zwischen ‚Latin1_General_CI_AS_KS_WS‘ und ‚Estonian_CS_AS‘ im Gleich-Vorgang kann nicht aufgelöst werden.“Because tempdb uses the default server collation and TestPermTab.Col1 uses a different collation, SQL Server returns this error: "Cannot resolve collation conflict between 'Latin1_General_CI_AS_KS_WS' and 'Estonian_CS_AS' in equal to operation."

Sie können den Fehler vermeiden, indem Sie stattdessen eine der folgenden Alternativen verwenden:To prevent the error, you can use one of the following alternatives:

  • Geben Sie an, dass für die Spalte der temporären Tabelle die Standardsortierung der Benutzerdatenbank und nicht die Standardsortierung von tempdbverwendet wird.Specify that the temporary table column use the default collation of the user database, not tempdb. Auf diese Weise kann die temporäre Tabelle mit ähnlich formatierten Tabellen in mehreren Datenbanken arbeiten, wenn dies in dem System erforderlich ist.This enables the temporary table to work with similarly formatted tables in multiple databases, if that is required of your system.

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

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

Weitere Informationen finden Sie unterSee Also

Festlegen oder Ändern der Serversortierung Set or Change the Server Collation
Festlegen oder Ändern der Datenbanksortierung Set or Change the Database Collation
Collation and Unicode SupportCollation and Unicode Support