SQL Server-Datenbanksortierung ändern

Möglicherweise müssen Sie Ihre Datenbank ändern, um eine andere Sortierung zu verwenden.

Sie können dies mit dem folgenden Snippet tun:

USE master;GOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS ;GO--Verify the collation setting.SELECT name, collation_nameFROM sys.databasesWHERE name = N'';GO

Wenn Sie das obige Snippet ausführen, kann der folgende Fehler auftreten:

Die Datenbank konnte nicht ausschließlich gesperrt werden, um den Vorgang auszuführen

Dieser Fehler tritt auf, wenn sich Ihre Datenbank im Mehrbenutzermodus befindet oder wenn Objekte vorhanden sind, die auf Ihre Datenbank verweisen.

Um diesen Fehler zu beheben, müssen Sie die folgenden Schritte ausführen:

  1. Stellen Sie die Datenbank auf den Einzelbenutzermodus ein;
  2. Führen Sie die erforderlichen Änderungen an Ihrer Datenbank durch, in diesem Fall ändern Sie die Sortierung;
  3. Stellen Sie die Datenbank wieder in den Mehrbenutzermodus.

Das obige Snippet kann also auf das folgende aktualisiert werden:

USE master;GO-- Set to single-user modeALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGO -- change collationALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GO -- Set to multi-user modeALTER DATABASE SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO --Verify the collation setting. SELECT name, collation_name FROM sys.databases WHERE name = N'MyOptionsTest'; GO

Der obige Vorgang kann verwendet werden, wenn Sie gerade eine neue Datenbank ohne Daten erstellt haben, ohne die gewünschte Datenbanksortierung festzulegen.

Sortierung in Tabellenspalten ändern

In Ihrer Datenbank gibt es möglicherweise Tabellenspalten mit unterschiedlicher Sortierung, nämlich Tabellenspalten vom Typ char, varchar, text, nchar, nvarchar und ntext. Um alle Tabellenspalten mit ihren aktuellen Sortierungen aufzulisten, können Sie die folgende Abfrage ausführen:

SELECT t.name, c.name, c.collation_nameFROM sys.columns c INNER JOIN sys.tables t ON t.object_id = c.object_idWHERE c.object_id IN (SELECT object_id FROM sys.objects WHERE type = 'U') AND c.collation_name != 'NULL'ORDER BY t.name, c.name

Bevor Sie Änderungen an den Sortierungen dieser Spalten vornehmen, müssen Sie prüfen, ob die Änderungen Probleme für die Anwendungen verursachen.

Um eine Spaltensortierung in eine neue zu ändern, können Sie die folgende Abfrage ausführen:

ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>

Stellen Sie im Fehlerfall sicher, dass die referenzierenden Einschränkungen und Indizes gelöscht werden.

Sortierung und vorhandene Daten ändern

Was ist mit Ihren vorhandenen Daten? Um sicherzustellen, dass vorhandene Daten nach dem Ändern der Sortierung abgerufen werden können, müssen Sie die folgenden Schritte ausführen:

  1. exportieren Sie alte Daten aus jeder Tabelle, entweder mit SQL Server Import und Export data Wizard oder bcp;
  2. Löschen und neu erstellen der Tabellen; und
  3. Importieren Sie zuvor exportierte Daten.

Im folgenden Beispiel erstellen wir eine Datenbank mit der Sortierung LATIN1_GENERAL_CI_AI, fügen eine Tabelle Products mit einem Spaltennamen (nvarchar(50)) hinzu und fügen einige Daten auf Griechisch ein.

CREATE DATABASE COLLATE LATIN1_GENERAL_CI_AI;-- -- Create Products table and add some dataUSE GOCREATE TABLE .( (50) NULL) ON GOinsert into dbo.Products (name) values (N'Προϊόν 1');insert into dbo.Products (name) values (N'Προϊόν 2');insert into dbo.Products (name) values (N'Προϊόν 3');insert into dbo.Products (name) values (N'Προϊόν 4');insert into dbo.Products (name) values (N'Προϊόν 5');

Wenn Sie alle Produkte suchen, die mit „ΠροϊΌν“ (griechisches Wort für Produkt) beginnen, erhalten Sie 5 Ergebnisse:

SELECT *FROM dbo.ProductsWHERE Name LIKE N'Προϊόν%';-- Results:Name--------------------------------------------------Προϊόν 1Προϊόν 2Προϊόν 3Προϊόν 4Προϊόν 5

Schritt 1. Daten exportieren

Exportieren Sie Daten in einer Tabelle mit bcp, das für Bulk Copy Program Utility (bcp) steht und Daten in einem benutzerdefinierten Format zwischen einer Instanz von Microsoft SQL Server und einer Datendatei kopiert. Dieses Dienstprogramm kann verwendet werden, um eine große Anzahl neuer Zeilen in SQL Server-Tabellen zu importieren oder Daten aus Tabellen in eine Adata-Datei zu exportieren. Dazu benötigen wir den folgenden Befehl:

bcp CollationTest.dbo.Products out Products.txt -c -T

dabei führt-cden Vorgang unter Verwendung eines Zeichendatentyps aus und-Tgibt an, dass das bcp-Dienstprogramm mithilfe der integrierten Sicherheit eine Verbindung mit SQL Server über eine vertrauenswürdige Verbindung herstellt.

Schritt 2. Change Database Collation

Im nächsten Schritt ändern wir die Datenbanksortierung in GREEK_CI_AI mit der folgenden Anweisung:

-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;

Schritt 3. Löschen und erstellen Sie die Produkte Tabelle

USE GODROP TABLE .;GOCREATE TABLE .( (50) NULL) ON GO

Schritt 4. Importieren Sie zuvor exportierte Daten

Dazu verwenden wir erneut das Dienstprogramm bcp, aber anstelle des Parameters out verwenden wir den Parameter in:

bcp CollationTest.dbo.Products in Products.txt -c -T

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.