Compartir a través de


Identificadores de base de datos

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de SQL Analytics en Microsoft FabricAlmacén en Microsoft FabricBase de datos SQL en Microsoft Fabric

El nombre del objeto de base de datos es su identificador.

Servidores, bases de datos y objetos de bases de datos, como tablas, vistas, columnas, índices, desencadenadores, procedimientos, restricciones, reglas, etc. pueden tener identificadores. La mayoría de los objetos requieren identificadores, pero algunos objetos, como restricciones, hacen que sean opcionales.

Cuando se define el objeto, se crea un identificador de objeto. Use el identificador para hacer referencia al objeto . Por ejemplo, la instrucción siguiente crea una tabla con el identificador TableXy dos columnas con los identificadores KeyCol y Description:

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

Esta tabla tiene una restricción sin nombre. La restricción de clave principal no tiene ningún identificador especificado por el usuario, por lo que el sistema lo asigna a un nombre generado como PK__TableX__D7CB9CCCEEF0806C. Puede ver este nombre en las vistas de metadatos del sistema, como sys.key_constraints.

Los nombres de restricción y otros objetos con ámbito de esquema deben ser únicos dentro de un esquema de base de datos. Por ejemplo, dos restricciones de clave principal no pueden compartir un nombre. Sin embargo, los nombres de columna solo deben ser únicos dentro de cada tabla, no dentro del esquema.

La intercalación de un identificador depende del nivel en el que se defina.

  • La intercalación predeterminada de la instancia se asigna a los identificadores de objetos de nivel de instancia, como las credenciales de inicio de sesión y los nombres de base de datos.

  • La intercalación predeterminada de la base de datos se asigna a identificadores de objetos de una base de datos, como tablas, vistas y nombres de columna. Por ejemplo, puede crear dos tablas con nombres que solo difieren en el caso de una base de datos que tenga intercalación que distingue mayúsculas de minúsculas, pero no puede crearlas en una base de datos que tenga intercalación que no distingue mayúsculas de minúsculas.

Note

Los nombres de las variables o los parámetros de funciones y procedimientos almacenados deben cumplir las reglas de Transact-SQL identificadores.

Clases de identificadores

Existen dos clases de identificadores:

  • Los identificadores regulares cumplen las reglas de formato de los identificadores. No se delimitan cuando se usan en instrucciones Transact-SQL. Los identificadores regulares deben seguir las reglas de los identificadores regulares: solo pueden contener letras, dígitos y ciertos símbolos (_, @, #, $), deben comenzar con una letra o una de _, @, #y no pueden ser una palabra reservada.

    USE AdventureWorks2025;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Los identificadores delimitados se incluyen entre comillas dobles (") o paréntesis ([ y ]). Los delimitadores permiten usar nombres que, de lo contrario, no serían válidos como identificadores regulares, como palabras clave reservadas, nombres con espacios o nombres con caracteres especiales. Los identificadores que ya cumplen las reglas de identificador normal también se pueden delimitar, pero los delimitadores son opcionales en ese caso. Para obtener más información, consulte Reglas para identificadores delimitados.

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

Los identificadores que no cumplen las reglas de los identificadores normales deben delimitarse en una instrucción Transact-SQL. Por ejemplo:

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.

Ambos identificadores, normales y delimitados, deben tener entre 1 y 128 caracteres. En el caso de las tablas temporales locales, el identificador puede tener un máximo de 116 caracteres.

Reglas para identificadores delimitados

Los identificadores delimitados se incluyen entre corchetes ([ y ]) o comillas dobles ("). Pueden contener cualquier combinación de caracteres, incluidos espacios, palabras clave reservadas y caracteres especiales que no se permiten en identificadores normales.

Identificadores delimitados por corchetes

Los identificadores delimitados por corchetes se incluyen entre corchetes ([ y ]). Si el propio identificador contiene un corchete derecho (]), escórtelo duplicando (]]). Un corchete izquierdo ([) no requiere escape.

Por ejemplo, para crear y consultar una tabla cuyo nombre contiene corchetes:

-- 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 función devuelve un identificador delimitado por corchetes válido para una cadena determinada y controla el escape automáticamente:

SELECT QUOTENAME('abc[]def');

En el ejemplo anterior se devuelve [abc[]]def].

Identificadores delimitados por comillas dobles

Los identificadores delimitados por comillas dobles se incluyen entre comillas dobles ("). Si el propio identificador contiene una comilla doble, escórtelo duplicando ("").

Los delimitadores de comillas dobles requieren SET QUOTED_IDENTIFIER ON (el valor predeterminado para la mayoría de las conexiones). Cuando QUOTED_IDENTIFIER es OFF, el Motor de base de datos trata las cadenas con comillas dobles como literales de cadena en lugar de identificadores. Para más información, consulte SET QUOTED_IDENTIFIER.

Por ejemplo, para crear y consultar una tabla que use palabras clave reservadas como identificadores:

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 no afecta a los identificadores delimitados por corchetes. Los delimitadores de corchetes siempre funcionan independientemente de la QUOTED_IDENTIFIER configuración.

Reglas de los identificadores regulares

Los nombres de variables, funciones y procedimientos almacenados deben seguir estas reglas para Transact-SQL identificadores.

  1. El primer carácter debe ser uno de los siguientes caracteres:

    • Una letra, tal como se define en el estándar Unicode 3,2. La definición Unicode de letras incluye los caracteres latinos de la a a la z y de la A a la Z, además de los caracteres de letras de otros idiomas.

    • El guion bajo (_), arroba (@) o número (#).

      Algunos símbolos al principio de un identificador tienen un significado especial en el Motor de base de datos. Un identificador normal que comience por el signo arroba siempre denotará una variable local o un parámetro, y no se puede usar como nombre de ningún otro tipo de objeto. Un identificador que empieza con el signo de número indica una tabla o procedimiento temporal. Un identificador que empieza con un signo de número doble (##) indica un objeto temporal global. Aunque los caracteres de signo numérico o de número doble se pueden usar para comenzar los nombres de otros tipos de objetos, debe evitar esta práctica.

      Algunas funciones de Transact-SQL tienen nombres que comienzan con signos dobles (@@). Para evitar confusiones con estas funciones, no use nombres que empiecen por @@.

  2. Los caracteres subsiguientes pueden incluir la siguiente lista:

    • Letras, tal como se definen en el estándar Unicode 3,2.

    • Números decimales del alfabeto Latín básico u otros alfabetos de otros idiomas.

    • El signo de arroba (@), signo de dólar ($), signo de número (#) o guion bajo (_).

  3. El identificador no debe ser una palabra reservada Transact-SQL. El Motor de base de datos reserva las versiones mayúsculas y minúsculas de las palabras reservadas. Cuando se usan identificadores en instrucciones Transact-SQL, delimitan los identificadores que no cumplen estas reglas mediante comillas dobles o corchetes. Las palabras reservadas dependen del nivel de compatibilidad de la base de datos. Establezca el nivel de compatibilidad de la base de datos mediante la instrucción ALTER DATABASE Compatibility Level.

  4. No use espacios incrustados ni caracteres especiales.

  5. No use los caracteres suplementarios.

Cuando se usan identificadores en instrucciones Transact-SQL, delimitan los identificadores que no cumplen estas reglas mediante comillas dobles o corchetes. Algunas de estas reglas varían en función del nivel de compatibilidad de la base de datos.

Intercalación de catálogos en Azure SQL Database

Usted no puede cambiar ni establecer la intercalación del servidor lógico en Azure SQL Database. Sin embargo, puede configurar los ordenamientos de cada base de datos por separado, tanto para sus datos como para su catálogo. La intercalación de catálogo determina la intercalación para los metadatos del sistema, como los identificadores de objeto. Puede especificar ambas intercalaciones de forma independiente al crear la base de datos en el portal de Azure, en Transact-SQL (T-SQL) con CREATE DATABASE o en PowerShell con New-AzSqlDatabase.

Para más detalles y ejemplos, consulte CREATE DATABASE. Especifique una intercalación para la base de datos (COLLATE) y una intercalación de catálogo para los metadatos del sistema y los identificadores de objeto (CATALOG_COLLATION).

Ordenación de catálogos en SQL Database en Microsoft Fabric

La intercalación predeterminada de una base de datos SQL en Fabric es SQL_Latin1_General_CP1_CI_AS. Puede configurar una intercalación diferente en el momento de la implementación, pero no puede cambiarla después de crear la base de datos. Las columnas individuales pueden usar sus propias intercalaciones. Para obtener más información sobre las opciones de implementación, consulte Options para crear una base de datos SQL en Fabric.