Partager via


Problèmes de dénomination T-SQL

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Base de données SQL dans Microsoft Fabric

Lorsque vous analysez le code T-SQL de votre projet de base de données, un ou plusieurs avertissements peuvent être classés comme des problèmes de dénomination. Vous devez résoudre les problèmes de dénomination pour éviter les situations suivantes :

  • Le nom que vous avez spécifié pour un objet peut entrer en conflit avec le nom d'un objet système.
  • Le nom que vous avez spécifié devra toujours être entouré de caractères d'échappement (dans SQL Server, « [ » et « ] »).
  • Le nom que vous avez spécifié peut prêter à confusion pour les personnes qui essaient de lire et de comprendre votre code.
  • Le code risque de ne pas fonctionner si vous l'exécutez avec des versions ultérieures de SQL Server.

En général, vous pouvez supprimer un problème de dénomination si d'autres applications que vous ne pouvez pas modifier dépendent du nom actuel.

Les règles fournies identifient les problèmes de dénomination suivants :

SR0011 : éviter d’utiliser des caractères spéciaux dans les noms d’objets

Si vous nommez un objet de base de données en utilisant l'un des caractères de la table suivante, vous rendez plus difficile non seulement la référence à cet objet, mais aussi la lecture du code qui contient le nom de cet objet :

Caractère Description
Espace blanc
[ Crochet gauche
] Crochet droit
' Guillemet simple
" Guillemets doubles

Comment corriger les violations

Pour résoudre ce problème, vous devez supprimer tous les caractères spéciaux du nom de l'objet. Si l'objet est référencé à d'autres emplacements dans votre projet de base de données (par exemple dans les tests unitaires de base de données), vous devez utiliser la refactorisation de base de données pour mettre à jour les références. Pour plus d'informations, consultez la section Renommer toutes les références à un objet de base de données.

Exemple

Dans le premier exemple, une table contient une colonne dont le nom comporte un caractère spécial. Dans le deuxième exemple, le nom ne contient pas de caractère spécial.

CREATE TABLE [dbo].[TableWithProblemColumn]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[Small'String] VARCHAR(10)
)
ON [PRIMARY]

CREATE TABLE [dbo].[FixedTable]
(
[ID] INT NOT NULL IDENTITY(0, 1),
[SmallString] VARCHAR(10)
)
ON [PRIMARY]

SR0012 : éviter d’utiliser des mots réservés pour les noms de types

Vous devez éviter d'utiliser un mot réservé comme nom d'un type défini par l'utilisateur, car les lecteurs auront plus de mal à comprendre le code de votre base de données. Vous pouvez utiliser des mots réservés dans SQL Server comme identificateurs et noms d'objets uniquement si vous utilisez des identificateurs délimités. Pour plus d'informations, consultez la liste complète des mots-clés réservés.

Comment corriger les violations

Vous devez renommer le type défini par l'utilisateur ou le nom de l'objet.

Exemple

Le premier exemple illustre la définition d'un type défini par l'utilisateur qui déclenche cet avertissement. Le deuxième exemple illustre une manière de corriger le type défini par l'utilisateur et de résoudre le problème.

-- Potential misuse of a keyword as a type name
CREATE TYPE Alter
FROM nvarchar(11) NOT NULL;

-- Corrected type name
CREATE TYPE AlterType
FROM nvarchar(11) NOT NULL;

SR0016 : évitez d’utiliser sp_ comme préfixe pour les procédures stockées

Dans SQL Server, le préfixe sp_ désigne les procédures stockées système. Si vous utilisez ce préfixe pour vos procédures stockées, le nom de votre procédure peut entrer en conflit avec le nom d'une procédure stockée système qui sera créée ultérieurement. Si un tel conflit se produit, votre application risque de ne pas fonctionner si elle fait référence à la procédure sans qualifier la référence par le schéma. Dans ce cas, le nom est lié à la procédure système et non à votre procédure.

Comment corriger les violations

Pour résoudre ce problème, vous devez remplacer sp_ par un préfixe différent pour désigner les procédures stockées de l'utilisateur, ou ne pas utiliser de préfixe du tout.

Exemple

Dans le premier exemple, le nom de la procédure déclenche l'émission de cet avertissement. Dans le deuxième exemple, la procédure utilise un préfixe usp_ au lieu de sp_ et évite l'avertissement.

CREATE PROCEDURE [dbo].[sp_procWithWarning]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END

CREATE PROCEDURE [dbo].[usp_procFixed]
(
@Value1 INT,
)
AS
BEGIN
-- Additional statements here
RETURN 0;
END