Database
 sql >> Datenbank >  >> RDS >> Database

Verstehen der Sortierung auf Datenbankebene und der Auswirkungen ihrer Änderung für eine Datenbank

Wenn Sie eine Anwendung entwickeln oder einen Code im SQL-Datenbanksystem schreiben, ist es wichtig zu verstehen, wie Daten sortiert und verglichen werden. Sie können Ihre Daten in einer bestimmten Sprache speichern oder möchten, dass SQL Server Groß- und Kleinschreibung getrennt behandelt. Microsoft hat eine SQL Server-Einstellung namens Collation bereitgestellt um solche Anforderungen zu kontrollieren und zu erfüllen.

Was ist Sortierung in SQL Server?

Wir können die Sortierung wie unten angegeben auf verschiedenen Ebenen in SQL Server festlegen.

  • Serverebene
  • Datenbankebene
  • Spaltenebene
  • Ausdrucksebene

Die Sortierung auf Serverebene kann manchmal als Sortierung auf SQL Server-Instanzebene bezeichnet werden .

Die Sortierung auf Datenbankebene wird von der Sortierungseinstellung auf Serverebene übernommen, wenn Sie während der Datenbankerstellung keine bestimmte Sortierung auswählen. Sie können die Sortierung auf Datenbankebene auch später ändern. Beachten Sie, dass die Änderung der Datenbanksortierung nur auf kommende oder neue Objekte angewendet wird, die nach der Änderung der Sortierung erstellt werden.

Die neue Sortierung ändert keine vorhandenen Daten, die in Tabellen gespeichert sind, die mit dem letzten Sortierungstyp sortiert wurden. Das Anwendungsteam muss aufgrund der neuen Sortierungseinstellung weiter planen, um diese gespeicherte Datenkonvertierung zu handhaben.

Es gibt mehrere Möglichkeiten, dies zu tun. Eine besteht darin, die Daten aus der vorhandenen Tabelle in eine neue Tabelle zu kopieren, die mit der neuen Sortierung erstellt wurde, und dann die alte Tabelle durch die neue zu ersetzen. Sie können Ihre Tabellendaten auch in eine neue Datenbank verschieben, indem Sie eine neue Sortierung erstellen und die alte Datenbank durch die neue ersetzen.

HINWEIS :Das Ändern der Sortierung ist eine komplexe Aufgabe, die Sie vermeiden sollten, es sei denn, Sie haben einen zwingenden Geschäftsfall.

Wie finde und ändere ich die Datenbanksortierung in SQL Server?

Lassen Sie uns fortfahren und die Sortierung der SQL Server-Instanz und aller auf dieser Instanz gehosteten Datenbanken überprüfen. Sie können die Sortierung überprüfen, indem Sie auf die Eigenschaften auf Datenbank- oder Instanzebene zugreifen Fenster mit SQL Server Management Studio oder indem Sie einfach die folgende T-SQL-Anweisung ausführen. Die Sortierung für jede Datenbank wird im Systemobjekt sys.databases gespeichert – wir greifen darauf zu, um diese Informationen zu erhalten.

--Check Database Collation
SELECT name, collation_name  
FROM sys.databases  
GO  
--Check Server or Instance level Collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]

Ich habe die obige T-SQL-Anweisung ausgeführt und die folgende Ausgabe erhalten. Wir können sehen, dass alle Datenbanken und die Sortierung auf Serverebene dieselben Einstellungen wie SQL_Latin1_General_CP1_CI_AS haben . Dies bedeutet, dass Datenbankkollatationen von der Kollatierung auf Serverebene geerbt wurden, während sie erstellt wurden, und der Standardwert wurde nicht geändert.

Lassen Sie mich Ihnen nun zeigen, wie Sie die Datenbanksortierung mithilfe der GUI in SQL Server Management Studio überprüfen.

Stellen Sie zunächst mithilfe von SQL Server Management Studio eine Verbindung zu Ihrer SQL Server-Instanz her. Erweitern Sie den Instanzknoten, gefolgt von den Datenbanken Mappe. Klicken Sie mit der rechten Maustaste auf die Zieldatenbank und wählen Sie Eigenschaften :

Sie erhalten die folgenden Datenbankeigenschaften Fenster.

Klicken Sie nun auf die Optionen Registerkarte auf der linken Seite. Sie erhalten mehrere Eigenschafteneinstellungen im rechten Bereich. Sammlung ist die erste Eigenschaft dieser Seite – Sie können sehen, dass sie dieselbe ist wie im obigen T-SQL-Skript.

Ebenso können Sie auf den SQL Server-Instanzknoten klicken und mit der rechten Maustaste auf die Eigenschaften auf Instanzebene klicken um die Sortierung auf Serverebene anzuzeigen.

Wenn Sie diese Sortierung in eine neue Sortierung ändern möchten, müssen Sie nur auf Sortierung klicken Dropdown und wählen Sie die gewünschte Option aus. Stellen Sie sicher, dass Sie eine vollständige Sicherung Ihrer Datenbank erstellt haben, bevor Sie dies tun.

Ich habe eine ähnliche Sortierung mit Groß-/Kleinschreibung SQL_Latin1_General_CP1_CS gewählt _AS für diese Datenbank und klickte auf OK um es anzuwenden. Hinweis:Stellen Sie sicher, dass während dieses Vorgangs niemand mit der Zieldatenbank verbunden ist, andernfalls müssen Sie den Modus auf Einzelbenutzermodus umstellen und diese Konfiguration ändern.

Sie können diese Datenbanksortierung auch mit der T-SQL-Anweisung ändern. Verwenden Sie dazu COLLATE -Klausel der ALTER DATABASE-Anweisung.

Zunächst haben wir die Datenbank auf den Single-User umgestellt Modus, änderte dann die Sortierung und verschob schließlich die Datenbank in den Multi-User Modus.

--Change Database Collation using T-SQL  
USE master;  
GO  
Alter DATABASE [AdventureWorks2019] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [AdventureWorks2019]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [AdventureWorks2019] SET MULTI_USER

Alle unterstützten Sortierungen in SQL Server auflisten

Dieser Abschnitt zeigt Ihnen, wie Sie alle verfügbaren Sortierungen in SQL Server finden. Lassen Sie mich Ihnen zunächst zeigen, wie Sie die Liste aller unterstützten Sortierungen für die SQL Server-Instanz erhalten.

SQL Server verfügt über eine Systemfunktion namens fn_helpcollations() die Sie verwenden können, um alle Sortierungen abzurufen.

Führen Sie den folgenden Befehl aus, um die Liste anzuzeigen.

--Display the list of all collations  
SELECT name, description FROM fn_helpcollations()

Wir können alle 5508 unterstützten Sortierungen im Ausgabebereich sehen. Wenn Sie sich nicht sicher sind, welche Sortierung Sie auswählen sollen, können Sie die WHERE-Klausel im folgenden Skript verwenden, um alle möglichen Sortierungen herauszufiltern, die für die Datenbank festgelegt werden können.

Angenommen, Sie müssen Ihre Daten in US-Englisch speichern und möchten, dass der SQL-Server sie in einem Format behandelt, bei dem die Groß-/Kleinschreibung beachtet wird. Sie können den folgenden Befehl verwenden, um die Liste möglicher und unterstützter Sortierungen für Ihre Abfrage abzurufen:

--Display the list of all collations with WHERE clause 
SELECT Name, Description FROM fn_helpcollations()  
WHERE Name like 'SQL_Latin1%' AND Description LIKE '%case-sensitive%’

Die Ausgabe zeigt nur 10 Sortierungen, die Ihre Abfrage erfüllen. Sie können das obige Skript verwenden, um verschiedene Sortierungen herauszufiltern.

Auswirkung einer Änderung der Datenbanksortierung auf die Abfrageausgabe

In diesem Abschnitt zeige ich Ihnen den Unterschied zwischen den beiden Ausgaben derselben Abfrage, wenn sie mit unterschiedlichen Sortierungen ausgeführt werden.

Zuerst erstelle ich eine Datenbank namens MSSQL mit einer Sortierung (SQL_Latin1_General_CP1_CS _AS ). Dann werde ich dieselbe Abfrage zweimal ausführen, um die Ausgabe zu erhalten. Später werde ich die Sortierung in SQL_Latin1_General_CP1_CI ändern _AS und führen Sie dieselben Abfragen erneut aus, um ihre Ausgabe zu erhalten. Sie können beide Ausgaben vergleichen und die Auswirkungen einer Änderung einer Datenbanksortierung nachvollziehen. Beginnen wir also mit der Datenbankerstellung.

Starten Sie das Fenster zum Erstellen einer neuen Datenbank, wie im folgenden Bild gezeigt. Sie können diese Datenbank auch mit T-SQL erstellen. Danach können Sie den Datenbanknamen und seine Datendateien sehen. Klicken Sie nun auf die zweite Registerkarte im linken Bereich, um zum Sortierungseigenschaftenfenster zu wechseln.

Sie können sehen, dass der Sortierungsname für diese Datenbank der Standard ist . Dies bedeutet, dass diese Datenbank die Sortierung vom Sortierungstyp auf Serverebene erbt. Klicken Sie auf die Sammlung Drop-down, um Ihre neue Sortierung auszuwählen.

Ich habe die folgende Sortierung SQL_Latin1_General_CP1_CS ausgewählt _AS für diese Datenbank – nicht die Standarddatenbank. Klicken Sie auf OK um mit der Datenbankerstellung fortzufahren.

Überprüfen Sie nun die Datenbanksortierung auf eine neu erstellte Datenbank. Wir können sehen, dass es sich um SQL_Latin1_General_CP1_CS handelt _AS wie wir im vorherigen Schritt ausgewählt haben.

In SQL_Latin1_General_CP1_CS _AS , CS steht für case-sensitive Modus und CI steht für case-insensitive Modus. Jetzt können Sie entweder den folgenden T-SQL-Code oder einen beliebigen Code ausführen, um die Ausgabe zu erhalten.

Ich habe den gleichen Befehl zweimal ausgeführt. Das erste Skript filtert die Spaltennamen mit einem Wert SYS in Hauptstadt Buchstaben, während das zweite Skript dieselbe Spalte mit demselben Wert sys filtert in klein Briefe. Der Ausgabeabschnitt zeigt, dass das erste Skript keine Ausgabe gezeigt hat, wohingegen das zweite Skript die Ausgabe aufgrund seines Verhaltens mit Berücksichtigung der Groß-/Kleinschreibung angezeigt hat.

Select * from sysusers
Where name=’SYS’
Go
Select * from sysusers
Where name=’sys’
GO

Jetzt ändern wir die Kollatierung dieser Datenbank in die Kollatierung ohne Berücksichtigung der Groß-/Kleinschreibung SQL_Latin1_General_CP1_CI _AS indem Sie die folgenden T-SQL-Anweisungen ausführen. Sie können es auch über die GUI ändern, indem Sie auf das Fenster „Datenbankeigenschaften“ in SQL Server Management Studio zugreifen.

--Change database collation to SQL_Latin1_General_CP1_CI_AS
USE master;  
GO  
Alter DATABASE [MSSQL] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [MSSQL]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [MSSQL] SET MULTI_USER

Ich habe das obige Skript auf einmal ausgeführt, und die Datenbanksortierung wurde erfolgreich in eine neue Sortierung mit Unterstützung für Groß- und Kleinschreibung geändert.

Sie können diese Änderung überprüfen, indem Sie die folgenden Skripts ausführen, um die Sortierung der neu erstellten Datenbank MSSQL zu überprüfen. Wir können sehen, dass die neue Sortierung für diese Datenbank im folgenden Bild eingestellt ist.

Wir werden dieselbe T-SQL-Anweisung erneut ausführen, bevor wir die Sortierung ändern, um die Auswirkungen dieser Änderung zu sehen. Wie wir jetzt sehen können, sind beide T-SQL-Anweisungen in der Ausgabe.

Schlussfolgerung

Ich hoffe, es ist offensichtlich, dass die Sortierung in SQL Server entscheidend ist. Wir haben definiert, welche Auswirkungen es hat, wenn Sie auf einer beliebigen Ebene in SQL Server Änderungen an der Sortierung vornehmen. Führen Sie immer eine angemessene Planung durch und testen Sie die Änderungen zuerst in Ihrer Umgebung mit niedrigerem Lebenszyklus.

Bleiben Sie dran für meinen nächsten Artikel, in dem ich Ihnen Schritt für Schritt zeigen werde, wie Sie die Sortierung auf Serverebene ändern können.

Bitte teilen Sie diesen Artikel und geben Sie Ihr Feedback, es hilft uns, uns zu verbessern.