Wie ändere ich die Sortierung einer SQL Server-Datenbank?

16

Ich versuche, alle Datenbanken in einer einzigen Kollatierung zu standardisieren - Latin1_General_CI_AS (die Standardkollatierung). Ich habe einige Datenbanken, die in SQL_Latin1_General_CP1_CI_AS sind.

Ich weiß, dass ich ALTER DATABASE verwenden kann, um die Datenbanksortierung zu ändern, aber das betrifft nur neue Objekte. Ich verstehe, dass die einzige Möglichkeit, vorhandene Spalten zu ändern, darin besteht, ALTER COLUMN für jede Spalte in jeder Tabelle auszuführen. Dazu müsste ich alle Indizes löschen und neu erstellen.

Ich denke, es würde ungefähr so ​​aussehen:

DROP INDEX indexname ON tablename

GO

ALTER TABLE tablename ALTER COLUMN columname varchar(50) COLLATE Latin1_General_CI_AS NULL

GO

CREATE CLUSTERED INDEX indexname ON tablename (columname ASC)

und für jede varchar-, char-, text-, nvarchar-, nchar- und ntext-Spalte in der gesamten Datenbank wiederholen. Das wäre ein riesiges SQL-Skript.

Gibt es eine einfachere Möglichkeit, dies zu tun, oder kann jemand eine Möglichkeit vorschlagen, die Erstellung eines SQL-Skripts zu automatisieren, um dies zu tun?

Richard Gadsden
quelle

Antworten:

9

MS KB 325335 bietet Optionen dazu für die gesamte Datenbank und alle Spalten.

Grundsätzlich:

  1. Skriptdatenbanktabellen (mit neuer Kollatierung)
  2. DTS / SSIS-Daten (Sortierung beobachten)
  3. Fügen Sie Einschränkungen hinzu
gbn
quelle
2

Leider ist dies in SQL Server keine leichte Aufgabe.

Sie können ein Skript-Tool wie SQL Compare von Redgate für Ihre vorhandenen Datenbankobjekte (Tabellen, gespeicherte Prozeduren, Ansichten usw.) verwenden. Wenn Sie keine Lizenz haben, können Sie eine kostenlose Testversion verwenden. Nachdem Sie die neue Datenbank mit der richtigen Sortierung erstellt und die Objekte aus Ihrem Skript neu erstellt haben, können Sie SSIS ausführen, um Daten von einer Datenbank in eine andere zu übertragen. Wenn Sie viele Daten haben, verwenden Sie die T-SQL-Masseneinfügung.

Um die richtige Kollatierung für zukünftige Datenbanken auf diesem Server zu haben, können Sie die Standardkollatierung auf dem Server ändern. Der folgende MSDN-Artikel beschreibt, welche Änderungen mit den COLLATE-Klauseln von ALTER DATABASE und ALTER TABLE vorgenommen wurden:

Festlegen und Ändern der Datenbanksortierung (SQL Server 2008-Onlinedokumentation)

Sie können die Sortierung aller neuen Objekte ändern, die in einer Benutzerdatenbank erstellt wurden, indem Sie die COLLATE-Klausel der ALTER DATABASE- Anweisung verwenden. Diese Anweisung ändert nicht die Sortierung der Spalten in vorhandenen benutzerdefinierten Tabellen. Diese können mit der COLLATE-Klausel von ALTER TABLE geändert werden .

Wenn Sie die Datenbanksortierung ändern, ändern Sie Folgendes:

  • Die Standardkollatierung für die Datenbank. Diese neue Standardkollatierung wird auf alle Spalten, benutzerdefinierten Datentypen, Variablen und Parameter angewendet, die anschließend in der Datenbank erstellt werden. Es wird auch verwendet, wenn die in SQL-Anweisungen angegebenen Objektkennungen in Bezug auf die in der Datenbank definierten Objekte aufgelöst werden.
  • Alle Spalten char, varchar, text, nchar, nvarchar oder ntext in Systemtabellen werden in die neue Kollatierung geändert.
  • Alle vorhandenen char-, varchar-, text-, nchar-, nvarchar- oder ntext-Parameter und skalaren Rückgabewerte für gespeicherte Prozeduren und benutzerdefinierte Funktionen werden in die neue Kollatierung geändert.
  • Die Systemdatentypen char, varchar, text, nchar, nvarchar oder ntext sowie alle benutzerdefinierten Datentypen, die auf diesen Systemdatentypen basieren, werden in die neue Standardkollatierung geändert.
splattne
quelle
1

Im Allgemeinen wird davon abgeraten, dies auf einem Live-Server durchzuführen. Als ich das letzte Mal nachgesehen habe, wurde dies von Microsoft nicht offiziell unterstützt. Dazu müssen Sie in der Praxis eine neue Instanz mit der richtigen Sortierung erstellen und die Datenbank in diese migrieren.

Das Wiederherstellen einer Datenbank mit auf einem Server mit einer anderen Standardkollatierung macht jede Menge Spaß, da tempdb die Kollatierung des neuen Servers hat, weshalb dies auch nicht empfohlen wird.

Betroffen vonTunbridgeWells
quelle
1

Probieren Sie dieses Dienstprogramm aus , mit dem bei einer vorgegebenen Quellendatenbank alle Skripts generiert werden, die für eine Zieldatenbank erforderlich sind, damit die Sortierung sicher geändert wird.

Manea Florin
quelle
1

Mit den Ansichten von Infomation_Schema können Sie problemlos ein Skript erstellen. Ich bin mir jedoch nicht sicher, ob dies der beste Weg ist, um Ihr Problem zu lösen. Das erneute Erstellen aller Indizes auf einer großen Datenbank kann eine enorme Menge an Zeit / Speicherplatz in Anspruch nehmen. Ich würde mit der Migration (nicht der Wiederherstellung) auf eine neue Instanz fortfahren.

Dave Jackson
quelle