Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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; GOSQL Server Management Studio: Weitere Informationen, Sortierung und Unicode-Unterstützung.
Verwenden der
Column.CollationEigenschaft 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
#TestTempTabSpalte 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