Identificadores de base de datos

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric

El nombre de un objeto de base de datos se conoce como su identificador. Cualquier elemento de SQL Server puede tener un identificador. Servidores, bases de datos y objetos de bases de datos, como tablas, vistas, columnas, índices, desencadenadores, procedimientos, restricciones, reglas, etc. pueden tener identificadores. Se requiere que la mayor parte de los objetos tengan identificadores; pero para ciertos objetos, como las restricciones, son opcionales.

El identificador de un objeto se crea cuando se define el objeto. A continuación, el identificador se utiliza 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 también una restricción sin nombre. La restricción PRIMARY KEY no tiene ningún identificador.

La intercalación de un identificador depende del nivel en que está definido. Se asigna a los identificadores de objetos de instancia, como los inicios de sesión y los nombres de base de datos, la intercalación predeterminada de la instancia. A los identificadores de objetos de una base de datos, como nombres de tablas, vistas y columnas, se asigna la intercalación predeterminada de la base de datos. Por ejemplo, es posible crear dos tablas con nombres que solo se diferencian en las mayúsculas en una base de datos con intercalación que distinga entre mayúsculas y minúsculas, pero no se pueden crear en una base de datos con intercalación que no distinga entre mayúsculas y minúsculas.

Nota:

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

Clases de identificadores

Existen dos clases de identificadores:

  • Los identificadores normales cumplen con las reglas respecto al formato de identificadores. Los identificadores normales no están delimitados cuando se usan en instrucciones Transact-SQL.

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Los identificadores delimitados se incluyen entre comillas dobles (") o paréntesis ([ y ]). Los identificadores que siguen las reglas de formato de los identificadores pueden no estar delimitados. Por ejemplo:

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

Los identificadores que no cumplen las reglas de los identificadores deben estar delimitados en las instrucciones Transact-SQL. Por ejemplo:

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.

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 de los identificadores normales

Los nombres de variables, funciones y procedimientos almacenados deben cumplir las siguientes reglas para los identificadores de Transact-SQL.

  1. El primer carácter debe ser alguno de los siguientes elementos:

    • 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 (#).

      Ciertos símbolos al principio de un identificador tienen un significado especial en SQL Server. 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 es posible utilizar los caracteres de signo de número o doble signo de número para comenzar los nombres de otros tipos de objetos, no se recomienda hacerlo.

      Algunas funciones de Transact-SQL tienen nombres que empiezan con un doble signo de arroba (@@). Para evitar confusiones con estas funciones, se recomienda no utilizar nombres que empiecen con @@.

  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 (@), dólar ($), número (#) o el guion bajo (_).

  3. El identificador no debe ser una palabra reservada de Transact-SQL. SQL Server se reserva las versiones en mayúsculas y minúsculas de las palabras reservadas. Cuando se utilizan en instrucciones Transact-SQL, los identificadores que no cumplan estas reglas deben aparecer delimitados por comillas dobles o corchetes. Las palabras reservadas dependen del nivel de compatibilidad de la base de datos. Este nivel se puede establecer mediante la instrucción nivel de compatibilidad de ALTER DATABASE .

  4. No se permiten los caracteres especiales o los espacios incrustados.

  5. Los caracteres complementarios no están permitidos.

Cuando se utilizan en instrucciones Transact-SQL, los identificadores que no cumplan estas reglas deben aparecer delimitados por comillas dobles o corchetes.

Nota:

Algunas reglas de formato de los identificadores normales dependen del nivel de compatibilidad de la base de datos. Este nivel se puede establecer mediante nivel de compatibilidad de ALTER DATABASE.

Intercalación catálogos de Azure SQL Database

No puede cambiar ni establecer la intercalación predeterminada del servidor lógico en la base de datos de Azure SQL. Sin embargo, puede configurar las intercalaciones de cada base de datos por separado para los datos de la base de datos y para el catálogo. La intercalación de catálogo determina la intercalación para los metadatos del sistema, como identificadores de objeto. Ambas intercalaciones se pueden especificar de forma independiente al crear la base de datos en Azure Portal, en T-SQL con CREATE DATABASE, 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).