janvier 28, 2022

{coding}Sight

Lorsque vous développez une application ou écrivez un code dans le système de base de données SQL, il est crucial de comprendre comment les données seront triées et comparées. Vous pouvez stocker vos données dans une langue spécifique, ou vous pouvez souhaiter que SQL Server traite les données sensibles à la casse et insensibles à la casse séparément. Microsoft a fourni un paramètre SQL Server appelé Classement pour contrôler et répondre à ces exigences.

Qu’est-ce que le classement dans SQL Server ?

Nous pouvons définir le classement à différents niveaux dans SQL Server comme indiqué ci-dessous.

  • Niveau serveur
  • Niveau base de données
  • Niveau Colonne
  • Niveau Expression

Le classement au niveau serveur peut parfois être appelé Classement au niveau de l’instance SQL Server.

Le classement au niveau de la base de données sera hérité du paramètre de classement au niveau du serveur si vous ne choisissez aucun classement spécifique lors de la création de la base de données. Vous pouvez également modifier le classement au niveau de la base de données ultérieurement. Notez que la modification du classement de la base de données ne sera appliquée qu’aux objets à venir ou nouveaux qui seront créés après le changement de classement.

Le nouveau classement ne modifiera pas les données existantes stockées dans les tables qui ont été triées avec le dernier type de classement. L’équipe d’application a besoin d’une planification plus poussée pour gérer cette conversion de données stockées en raison du nouveau paramètre de classement.

Il y a plusieurs façons de le faire. La première consiste à copier les données de la table existante dans une nouvelle table créée avec le nouveau classement, puis à remplacer l’ancienne table par la nouvelle. Vous pouvez également déplacer les données de votre table vers une nouvelle base de données en ayant un nouveau classement et remplacer l’ancienne base de données par la nouvelle.

REMARQUE: La modification du classement est une tâche complexe et vous devez l’éviter, sauf si vous avez une analyse de rentabilisation obligatoire.

Comment trouver et modifier le classement de base de données dans SQL Server?

Allons-y et vérifions le classement de l’instance SQL Server et de toutes les bases de données hébergées sur cette instance. Vous pouvez vérifier le classement en accédant à la fenêtre des propriétés au niveau de la base de données ou de l’instance à l’aide de SQL Server Management Studio ou en exécutant simplement l’instruction T-SQL ci-dessous. Le classement de chaque base de données est stocké dans l’objet système sys.bases de données – nous y accéderons pour obtenir ces informations.

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

J’ai exécuté l’instruction T-SQL ci-dessus et obtenu la sortie ci-dessous. Nous pouvons voir que toutes les bases de données et le classement au niveau du serveur ont les mêmes paramètres que SQL_Latin1_General_CP1_CI_AS. Cela signifie que les classements de base de données ont été hérités par le classement au niveau du serveur lors de leur création et que la valeur par défaut n’a pas été modifiée.

 Sortie de l'exécution de l'instruction T-SQL

Maintenant, laissez-moi vous montrer comment vérifier le classement de la base de données à l’aide de l’interface graphique dans SQL Server Management Studio.

Tout d’abord, connectez-vous à votre instance SQL Server à l’aide de SQL Server Management Studio. Développez le nœud d’instance suivi du dossier Bases de données. Cliquez avec le bouton droit sur la base de données cible et choisissez Propriétés:

 choisissez propriétés dans la base de données cible

Vous obtiendrez la fenêtre des propriétés de la base de données ci-dessous.

Cliquez maintenant sur l’onglet Options dans le panneau de gauche. Vous obtiendrez plusieurs paramètres de propriétés dans le panneau de droite. Le classement est la première propriété de cette page – vous pouvez voir qu’elle est la même que dans le script T-SQL ci-dessus.

De même, vous pouvez cliquer sur le nœud d’instance SQL Server et cliquer avec le bouton droit sur les propriétés au niveau de l’instance pour afficher le classement au niveau du serveur.

 classement au niveau du serveur

Si vous souhaitez changer ce classement en un nouveau classement, il vous suffit de cliquer sur le menu déroulant Classement et de choisir l’option dont vous avez besoin. Assurez-vous d’avoir effectué une sauvegarde complète de votre base de données avant de le faire.

 changer le classement en un nouveau

J’ai choisi un classement similaire avec SQL_Latin1_General_CP1_CS_AS sensible à la casse pour cette base de données et j’ai cliqué sur OK pour l’appliquer. Note: Assurez-vous que personne n’est connecté à la base de données cible pendant cette procédure, sinon vous devrez basculer le mode en mode utilisateur unique et modifier cette configuration.

 Propriétés de la base de données

Vous pouvez également modifier ce classement de base de données à l’aide de l’instruction T-SQL. Pour cela, utilisez la clause COLLATE de l’instruction ALTER DATABASE.

Tout d’abord, nous avons basculé la base de données en mode mono-utilisateur, puis modifié le classement et, enfin, déplacé la base de données en mode multi-utilisateurs.

--Change Database Collation using T-SQL USE master; GO Alter DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GOAlter DATABASE SET MULTI_USER

Listez Tous les classements pris en charge dans SQL Server

Cette section vous montrera comment trouver tous les classements disponibles dans SQL Server. Tout d’abord, laissez-moi vous montrer comment obtenir la liste de tous les classements pris en charge pour l’instance SQL Server.

SQL Server a une fonction système appelée fn_helpcollations() que vous pouvez utiliser pour récupérer tous les classements.

Exécutez la commande ci-dessous pour afficher la liste.

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

Nous pouvons voir tous les 5508 classements pris en charge dans la section sortie. Si vous ne savez pas quel classement choisir, vous pouvez utiliser la clause WHERE dans le script ci-dessous pour filtrer tous les classements possibles qui peuvent être définis sur la base de données.

 tous les classements pris en charge

Disons que vous devez stocker vos données en anglais américain et que le serveur SQL les gère dans un format sensible à la casse. Vous pouvez utiliser la commande ci-dessous pour récupérer la liste des classements possibles et pris en charge pour votre requête:

--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%'

La sortie n’affiche que 10 classements satisfaisant votre requête. Vous pouvez utiliser le script ci-dessus pour filtrer divers classements.

 filtrage des classements

Impact de la modification du classement de la base de données sur la sortie de la requête

Dans cette section, je vais vous montrer la différence entre les deux sorties de la même requête lorsqu’elles sont exécutées avec des classements différents.

Tout d’abord, je vais créer une base de données nommée MSSQL avec un classement (SQL_Latin1_General_CP1_CS_AS). Ensuite, je vais exécuter la même requête deux fois pour obtenir la sortie. Plus tard, je vais changer le classement en SQL_Latin1_General_CP1_CI_AS et exécuter à nouveau les mêmes requêtes pour obtenir leur sortie. Vous pouvez comparer les deux sorties et comprendre l’impact de la modification d’un classement de base de données. Commençons donc par la création de bases de données.

Lancez la nouvelle fenêtre de création de base de données comme indiqué dans l’image ci-dessous. Vous pouvez également créer cette base de données en utilisant T-SQL. Après cela, vous pouvez voir le nom de la base de données et ses fichiers de données. Maintenant, cliquez sur le deuxième onglet sur le panneau de gauche pour passer à la fenêtre des propriétés de classement.

 lancement d'une nouvelle fenêtre de création de base de données

Vous pouvez voir que le nom de classement de cette base de données est le nom par défaut. Cela signifie que cette base de données héritera du classement du type de classement au niveau du serveur. Cliquez sur le menu déroulant Collation pour choisir votre nouvelle collation.

 choisir une nouvelle collation

J’ai sélectionné le classement ci-dessous SQL_Latin1_General_CP1_CS_AS pour cette base de données – pas celle par défaut. Cliquez sur OK pour procéder à la création de la base de données.

 choisir une nouvelle collation

Maintenant, vérifiez le classement de la base de données pour une base de données nouvellement créée. Nous pouvons voir que c’est SQL_Latin1_General_CP1_CS_AS comme nous l’avons sélectionné à l’étape précédente.

 vérification du classement de la base de données pour la base de données nouvellement créée

Dans SQL_Latin1_General_CP1_CS_AS, CS représente le mode sensible à la casse et CI représente le mode insensible à la casse. Vous pouvez maintenant exécuter le code T-SQL ci-dessous ou n’importe quel code pour obtenir la sortie.

J’ai exécuté la même commande deux fois. Le premier script filtre les noms de colonnes avec une valeur SYS en lettres majuscules, tandis que le second script filtre la même colonne avec la même valeur sys en lettres minuscules. La section sortie montre que le premier script n’a affiché aucune sortie, tandis que le second script a affiché la sortie en raison de son comportement sensible à la casse.

Select * from sysusersWhere name='SYS'GoSelect * from sysusersWhere name='sys'GO
 Impact de la Modification du Classement de la base de données sur la sortie de la requête

Maintenant, nous allons changer le classement de cette base de données en le classement insensible à la casse SQL_Latin1_General_CP1_CI_AS en exécutant les instructions T-SQL ci-dessous. Vous pouvez également le modifier via l’interface graphique en accédant à la fenêtre Propriétés de la base de données dans SQL Server Management Studio.

--Change database collation to SQL_Latin1_General_CP1_CI_ASUSE master; GO Alter DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GOAlter DATABASE SET MULTI_USER

J’ai exécuté le script ci-dessus en un seul coup, et le classement de la base de données a été modifié avec succès en un nouveau classement sans prise en charge de la casse.

 nouveau classement avec un support insensible à la casse

Vous pouvez vérifier cette modification en exécutant les scripts ci-dessous pour vérifier le classement de la base de données MSSQL nouvellement créée. Nous pouvons voir que le nouveau classement est défini pour cette base de données dans l’image ci-dessous.

 un nouveau classement est défini pour la base de données

Nous exécuterons à nouveau la même instruction T-SQL avant de modifier le classement pour voir l’impact de ce changement. Comme nous pouvons le voir maintenant, les deux instructions T-SQL sont dans la sortie.

 Impact de la Modification du Classement de la base de données sur la sortie de la requête

Conclusion

J’espère qu’il est évident que le classement dans SQL Server est crucial. Nous avons défini l’impact que cela laisse si vous apportez des modifications au classement à n’importe quel niveau de SQL Server. Faites toujours une bonne planification et testez d’abord les modifications dans votre environnement de cycle de vie inférieur.

Restez à l’écoute pour mon prochain article, où je vais vous montrer une méthode étape par étape pour modifier le classement au niveau du serveur.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.