Identificateurs de base de données

S’applique à : SQL Server Base de données Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Point de terminaison analytique SQL dans Microsoft Fabric Entrepôt dans Microsoft Fabric

Le nom d'un objet d'une base de données est son identificateur. Dans SQL Server, tous les éléments peuvent avoir un identificateur. Les serveurs, les bases de données et les objets de bases de données tels que les tables, les vues, les colonnes, les index, les déclencheurs, les procédures, les contraintes, les règles, etc. peuvent avoir des identificateurs. La plupart des objets doivent avoir un identificateur ; les identificateurs sont facultatifs pour certains objets, tels que les contraintes.

L'identificateur d'un objet est créé lors de la définition de l'objet. L'identificateur est ensuite utilisé pour référencer l'objet. L'instruction suivante, par exemple, crée une table avec l'identificateur TableX, et deux colonnes avec les identificateurs KeyCol et Description:

CREATE TABLE TableX (
    KeyCol INT PRIMARY KEY,
    Description NVARCHAR(80)
);

Cette table comporte également une contrainte sans nom. La contrainte PRIMARY KEY n'a pas d'identificateur.

Le classement d'un identificateur dépend du niveau auquel il est défini. Le classement par défaut de l'instance est assigné aux identificateurs d'objets qui sont au niveau de l'instance, tels que les noms de connexion et de base de données. Le classement par défaut de la base de données est affecté aux identificateurs d'objets qui appartiennent à la base de données, tels que les noms des tables, des vues et des colonnes. Par exemple, deux tables dont les noms diffèrent uniquement au niveau de la casse peuvent être créées dans une base de données dont le classement respecte la casse, mais pas dans une base de données dont le classement ne respecte pas la casse.

Remarque

Les noms de variables, ou les paramètres des fonctions et des procédures stockées doivent toujours respecter les règles des identificateurs Transact-SQL.

Classes d’identificateurs

Il existe deux classes d'identificateurs :

  • Les identificateurs réguliers respectent les règles relatives au format des identificateurs. Ils ne sont pas délimités lorsqu’ils sont utilisés dans des instructions Transact-SQL.

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Les identificateurs délimités sont placés entre guillemets (") ou entre crochets ([ et ]). Les identificateurs qui respectent les règles relatives au format des identificateurs peuvent ne pas être délimités. Par exemple :

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM [HumanResources].[Employee] --Delimiter is optional.
    WHERE [NationalIDNumber] = 153479919 --Delimiter is optional.
    

Ceux qui ne respectent pas ces règles ne peuvent être utilisés dans une instruction Transact-SQL qu’en étant délimités. Par exemple :

USE AdventureWorks2022;
GO

--Identifier contains a space and uses a reserved keyword.
CREATE TABLE [SalesOrderDetail Table] (
    [Order] INT NOT NULL,
    [SalesOrderDetailID] INT IDENTITY(1, 1) NOT NULL,
    [OrderQty] SMALLINT NOT NULL,
    [ProductID] INT NOT NULL,
    [UnitPrice] MONEY NOT NULL,
    [UnitPriceDiscount] MONEY NOT NULL,
    [ModifiedDate] DATETIME NOT NULL,
    CONSTRAINT [PK_SalesOrderDetail_Order_SalesOrderDetailID] PRIMARY KEY CLUSTERED (
        [Order] ASC,
        [SalesOrderDetailID] ASC
    )
);
GO

SELECT *
FROM [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
WHERE [Order] = 10; --Identifier is a reserved keyword.

Qu'ils soient réguliers ou délimités, les identificateurs doivent contenir de 1 à 128 caractères. Dans le cas des tables temporaires locales, l'identificateur peut contenir jusqu'à 116 caractères.

Règles pour identificateurs réguliers

Les noms de variables, de fonctions et de procédures stockées doivent toujours respecter les règles suivantes portant sur les identificateurs Transact-SQL.

  1. Le premier caractère doit être l'un des éléments suivants :

    • Une des lettres définies par Unicode Standard 3,2. Elles incluent les caractères latins de a à z et de A à Z ainsi que des caractères alphabétiques d'autres langues.

    • Les symboles trait de soulignement (_), arobase (@) ou dièse (#).

      Certains symboles au début d'un identificateur ont une signification particulière dans SQL Server. Un identificateur régulier qui commence par le signe arobase (@) dénote toujours une variable ou un paramètre local et ne peut pas être utilisé comme le nom d'un autre type d'objet. Un identificateur commençant par un symbole numéro indique un objet temporaire (table ou procédure). Un identificateur commençant par le double signe dièse (##) indique un objet temporaire global. Bien que les symboles dièse (#) et double dièse (##) puissent être utilisés pour commencer les noms d'autres types d'objets, nous ne recommandons pas cette pratique.

      Le nom de certaines fonctions Transact-SQL commence par un double arobas (@@). Pour éviter toute confusion avec ces fonctions, n’utilisez pas de noms commençant par @@.

  2. Les caractères suivants peuvent inclure la liste suivante :

    • Des lettres définies dans Unicode Standard 3,2.

    • Des nombres décimaux de Basic Latin ou d'autres scripts nationaux.

    • L’arobase (@), le symbole dollar ($), le symbole dièse (#) ou le trait de soulignement (_).

  3. L’identificateur ne doit pas être un mot réservé Transact-SQL. SQL Server conserve les majuscules et les minuscules des mots réservés. Un identificateur qui ne respecte pas toutes ces règles doit toujours être délimité par des crochets ou des guillemets doubles lors de son utilisation dans une instruction Transact-SQL. Les mots réservés dépendent du niveau de compatibilité de la base de données. Vous pouvez définir ce niveau avec l’instruction ALTER DATABASE compatibility level.

  4. Les espaces incorporés ou les caractères spéciaux ne sont pas autorisés.

  5. L’utilisation de caractères supplémentaires n’est pas autorisée.

Un identificateur qui ne respecte pas toutes ces règles doit toujours être délimité par des crochets ou des guillemets doubles lors de son utilisation dans une instruction Transact-SQL.

Remarque

Certaines règles relatives au format des identificateurs réguliers dépendent du niveau de compatibilité de la base de données. Vous pouvez définir ce niveau avec ALTER DATABASE compatibility level.

Classement du catalogue dans la base de données Azure SQL

Vous ne pouvez pas modifier ou définir le classement du serveur logique sur Azure SQL Database. Toutefois, vous pouvez configurer les classements de chaque base de données séparément pour les données de la base de données et pour le catalogue. Le classement du catalogue détermine le classement pour les métadonnées système, telles que les identificateurs d’objet. Les deux classements peuvent être spécifiés indépendamment lorsque vous créez la base de données dans le portail Azure, dans T-SQL avec CREATE DATABASE, dans PowerShell avec New-AzSqlDatabase.

Pour plus d’informations et exemples, consultez CREATE DATABASE. Spécifiez un classement pour la base de données (COLLATE) et un classement de catalogue pour les métadonnées système et les identificateurs d’objet (CATALOG_COLLATION).