Partager via


Identificateurs de base de données

 <c0>S'applique à :</c0><c1 /><c2>SQL Server</c2><c3 /><c4>Azure SQL Database</c4><c5 /><c6>Azure SQL Managed Instance</c6><c7 /><c8>Azure Synapse Analytics</c8><c9 /><c10>Analytics Platform System (PDW)</c10><c11 /><c12>Point de terminaison d'analytique SQL dans Microsoft Fabric</c12><c13 /><c14>Warehouse dans Microsoft Fabric</c14><c15 /><c16>Base de données SQL dans Microsoft Fabric</c16>

Le nom de l’objet de base de données est son 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 nécessitent des identificateurs, mais certains objets, tels que les contraintes, les rendent facultatifs.

Vous créez un identificateur d’objet lorsque vous définissez l’objet. Utilisez l’identificateur 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 a une contrainte sans nom. La contrainte de clé primaire n’a pas d’identificateur spécifié par l’utilisateur. Par conséquent, le système lui attribue un nom généré comme PK__TableX__D7CB9CCCEEF0806C. Vous pouvez voir ce nom dans les vues de métadonnées système comme sys.key_constraints.

Les noms de contraintes et d'autres objets portés par le schéma doivent être uniques au sein d'un schéma de base de données. Par exemple, deux contraintes de clé primaire ne peuvent pas partager un nom. Toutefois, les noms de colonnes doivent uniquement être uniques dans chaque table, et non dans le schéma.

Le classement d’un identificateur dépend du niveau auquel vous le définissez.

  • Le classement par défaut de l’instance est affecté à des identificateurs d’objets au niveau de l’instance, tels que les connexions et les noms de base de données.

  • Le classement par défaut de la base de données est attribué aux identificateurs d’objets d’une base de données, tels que les tables, les vues et les noms de colonnes. Par exemple, vous pouvez créer deux tables avec des noms qui diffèrent uniquement dans le cas d’une base de données qui a un classement respectant la casse, mais vous ne pouvez pas les créer dans une base de données qui ne respecte pas la casse.

Note

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

Classes d’identificateurs

Il existe deux classes d'identificateurs :

  • Les identificateurs réguliers respectent les règles de format pour les identificateurs. Ils ne sont pas délimités lorsqu'ils sont utilisés dans des instructions Transact-SQL. Les identificateurs réguliers doivent respecter les règles pour les identificateurs réguliers : ils ne peuvent contenir que des lettres, des chiffres et certains symboles (_, , @#, $), doivent commencer par une lettre ou une lettre _, @et #ne peuvent pas être un mot réservé.

    USE AdventureWorks2025;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Les identificateurs délimités sont placés entre guillemets (") ou entre crochets ([ et ]). Les délimiteurs vous permettent d’utiliser des noms qui seraient autrement non valides en tant qu’identificateurs réguliers, tels que les mots clés réservés, les noms avec des espaces ou les noms avec des caractères spéciaux. Les identificateurs qui sont déjà conformes aux règles d’identificateur standard peuvent également être délimités, mais les délimiteurs sont facultatifs dans ce cas. Pour plus d’informations, consultez Règles pour les identificateurs délimités.

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

Les identificateurs qui ne respectent pas les règles relatives aux identificateurs réguliers doivent être délimités dans une instruction Transact-SQL. Par exemple:

USE AdventureWorks2025;
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 les identificateurs délimités

Les identificateurs délimités sont placés entre crochets ([ et ]) ou entre guillemets doubles ("). Ils peuvent contenir n’importe quelle combinaison de caractères, y compris des espaces, des mots clés réservés et des caractères spéciaux qui ne sont pas autorisés dans les identificateurs réguliers.

Identificateurs délimités entre crochets

Les identificateurs délimités par des crochets sont placés entre crochets ([ et ]). Si l’identificateur lui-même contient un crochet droit (]), échappez-le en le doublant (]]). Un crochet gauche ([) ne nécessite pas d’échappement.

Par exemple, pour créer et interroger une table dont le nom contient des crochets :

-- Create a table with a ] character in its name.
CREATE TABLE [My]]Table]
(
    ID INT PRIMARY KEY
);
GO

-- Reference the table in a query.
SELECT *
FROM [My]]Table];
GO

La QUOTENAME fonction retourne un identificateur délimité par crochet valide pour une chaîne donnée et gère automatiquement l’échappement :

SELECT QUOTENAME('abc[]def');

L’exemple précédent retourne [abc[]]def].

Identificateurs délimités par guillemets doubles

Les identificateurs délimités par des guillemets doubles sont placés entre guillemets doubles ("). Si l’identificateur lui-même contient un guillemet double, échappez-le en le doublant ("").

Les délimiteurs de guillemets doubles nécessitent SET QUOTED_IDENTIFIER ON (la valeur par défaut pour la plupart des connexions). Lorsque QUOTED_IDENTIFIER est OFF, le Moteur de base de données traite les chaînes entre guillemets doubles comme des littéraux de chaîne au lieu d’identificateurs. Pour plus d’informations, voir SET QUOTED_IDENTIFIER.

Par exemple, pour créer et interroger une table qui utilise des mots clés réservés comme identificateurs :

SET QUOTED_IDENTIFIER ON;
GO

-- Create a table using double-quote delimiters.
CREATE TABLE "My Table"
(
    "Order" INT NOT NULL,
    "Description" NVARCHAR (100)
);
GO

SELECT "Order",
       "Description"
FROM "My Table";
GO

Note

SET QUOTED_IDENTIFIER n’affecte pas les identificateurs délimités par crochet. Les délimiteurs de crochet fonctionnent toujours indépendamment du QUOTED_IDENTIFIER paramètre.

Les règles pour les identificateurs standard

Les noms de variables, de fonctions et de procédures stockées doivent respecter ces règles pour les identificateurs Transact-SQL.

  1. Le premier caractère doit être l’un des caractères suivants :

    • Une des lettres définies par Unicode Standard 3,2. La définition Unicode des lettres inclut les caractères latins de a à z, de A à Z, ainsi que les lettres 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 la Moteur de base de données. 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 deux signes dièse (##) indique un objet temporaire global. Bien que le signe numérique ou les caractères de signe numérique double puissent être utilisés pour commencer les noms d’autres types d’objets, vous devez éviter cette pratique.

      Certaines fonctions Transact-SQL ont des noms commençant par des signes doubles (@@). 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 signe dollar ($), le signe dièse (#) ou le trait de soulignement (_).

  3. L’identificateur ne doit pas être un mot réservé Transact-SQL. Le Moteur de base de données réserve les versions majuscules et minuscules des mots réservés. Lorsque vous utilisez des identificateurs dans des instructions Transact-SQL, délimitez les identificateurs qui ne respectent pas ces règles en utilisant des guillemets doubles ou des crochets. Les mots réservés dépendent du niveau de compatibilité de la base de données. Définissez le niveau de compatibilité de la base de données à l’aide de l’instruction de niveau de compatibilité ALTER DATABASE .

  4. N’utilisez pas d’espaces incorporés ou de caractères spéciaux.

  5. N’utilisez pas de caractères supplémentaires.

Lorsque vous utilisez des identificateurs dans des instructions Transact-SQL, délimitez les identificateurs qui ne respectent pas ces règles en utilisant des guillemets doubles ou des crochets. Certaines de ces règles varient en fonction du niveau de compatibilité de la base de données.

Classement du catalogue dans Azure SQL Database

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. Vous pouvez spécifier les deux classements indépendamment lorsque vous créez la base de données dans le portail Azure, dans Transact-SQL (T-SQL) avec CREATE DATABASE ou 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).

Classement du catalogue dans la base de données SQL dans Microsoft Fabric

Le classement par défaut d’une base de données SQL dans Fabric est SQL_Latin1_General_CP1_CI_AS. Vous pouvez configurer un autre classement au moment du déploiement, mais vous ne pouvez pas le modifier une fois la base de données créée. Les colonnes individuelles peuvent utiliser leurs propres classements. Pour plus d’informations sur les options de déploiement, consultez Options pour créer une base de données SQL dans Fabric.