Compartilhar via


Identificadores de banco de dados

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Ponto de extremidade de análise de SQL no Microsoft FabricDepósito no Microsoft FabricBanco de dados SQL no Microsoft Fabric

O nome do objeto de banco de dados é conhecido como identificador.

Servidores, bancos de dados e objetos de banco de dados, como tabelas, exibições, colunas, índices, gatilhos, procedimentos, restrições e regras, podem ter identificadores. A maioria dos objetos exige identificadores, mas alguns objetos, como restrições, os tornam opcionais.

Você cria um identificador de objeto quando define o objeto. Use o identificador para fazer referência ao objeto. Por exemplo, a seguinte instrução cria uma tabela com o identificador TableXe duas colunas com os identificadores KeyCol e Description:

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

Essa tabela também tem uma restrição sem nome. A restrição de chave primária não tem identificador e, portanto, seria atribuído um nome gerado pelo sistema, como PK__TableX__D7CB9CCCEEF0806C, que você poderia observar em exibições de metadados do sistema como sys.key_constraints.

Os nomes de restrição e outros objetos com escopo de esquema devem ser exclusivos em um esquema de banco de dados. Por exemplo, duas restrições de chave primária não podem compartilhar um nome. No entanto, os nomes de coluna só precisam ser exclusivos em cada tabela, não dentro do esquema.

A ordenação de um identificador depende do nível em que você o define.

  • A ordenação padrão da instância é atribuída a identificadores de objetos no nível da instância, como logons e nomes de banco de dados.
  • A ordenação padrão do banco de dados é atribuída a identificadores de objetos em um banco de dados, como tabelas, exibições e nomes de coluna. Por exemplo, você pode criar duas tabelas com nomes que diferem apenas no caso de um banco de dados que tenha ordenação que diferencia maiúsculas de minúsculas, mas não é possível criá-las em um banco de dados que tenha ordenação que não diferencia maiúsculas de minúsculas.

Note

Os nomes de variáveis ou os parâmetros de funções e procedimentos armazenados devem obedecer às regras para identificadores Transact-SQL.

Classes de identificadores

Há duas classes de identificadores:

  • Os identificadores regulares estão em conformidade com as regras para formato de identificadores. Os identificadores normais não são delimitados quando utilizados em instruções Transact-SQL.

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Os identificadores delimitados são colocados entre aspas duplas (") ou colchetes ([ e ]). Os identificadores que estão em conformidade com as regras de formato de identificadores podem não ser delimitados. Por exemplo:

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

Os identificadores que não estão em conformidade com todas as regras para identificadores devem ser delimitados em uma instrução Transact-SQL. Por exemplo:

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.

Tanto os identificadores normais quanto os delimitados devem conter de 1 a 128 caracteres. Para tabelas temporárias locais, o identificador pode ter no máximo 116 caracteres.

Regras para identificadores regulares

Os nomes de variáveis, funções e procedimentos armazenados devem seguir essas regras para identificadores Transact-SQL.

  1. O primeiro caractere deve ser um dos seguintes caracteres:

    • Uma letra, como definido pelo Unicode Standard 3.2. A definição de letras do Unicode inclui caracteres latinos de a a z, de A a Z, além de caracteres de letras de outros idiomas.

    • Sublinhado (_), arroba (@) ou sinal de número (#).

      Determinados símbolos no começo de um identificador possuem um significado especial no SQL Server. Um identificador normal iniciado com o sinal de arroba denota sempre uma variável local ou parâmetro e não pode ser utilizado como nome de qualquer outro tipo de objeto. Um identificador iniciado com um sinal de número denota uma tabela temporária ou procedimento. Um identificador iniciado com dois sinais de número (##) denota um objeto temporário global. Embora possa ser utilizado um caractere de sinal de número ou dois sinais de número para começar os nomes de outros tipos de objetos, não recomendamos essa prática.

      Algumas funções do Transact-SQL têm nomes iniciados com dois sinais de arroba (@@). Para evitar confusão com essas funções, não use nomes que começam com @@.

  2. Os caracteres subsequentes podem incluir a seguinte lista:

    • Letras conforme definido no Unicode Standard 3.2.

    • Números decimais do latim básico ou outros scripts nacionais.

    • O sinal de arroba (@), cifrão ($), sinal de número (#) ou sublinhado (_).

  3. O identificador não deve ser uma palavra reservada do Transact-SQL. SQL Server reserva as versões maiúscula e minúscula de palavras reservadas. Quando você usa identificadores em instruções Transact-SQL, delimita identificadores que não estão em conformidade com essas regras usando aspas duplas ou colchetes. As palavras reservadas dependem do nível de compatibilidade do banco de dados. Defina o nível de compatibilidade do banco de dados usando a instrução ALTER DATABASE nível de compatibilidade.

  4. Não use espaços inseridos ou caracteres especiais.

  5. Não use caracteres suplementares.

Quando você usa identificadores em instruções Transact-SQL, delimita identificadores que não estão em conformidade com essas regras usando aspas duplas ou colchetes.

As regras do formato de identificadores normais dependem do nível de compatibilidade do banco de dados.

Ordenação de catálogos no Banco de Dados SQL do Azure

Você não pode alterar ou definir a ordenação do servidor lógico no Banco de Dados SQL do Azure. No entanto, você pode configurar a ordenação de cada banco de dados separadamente para dados no banco de dados e para catálogo. A ordenação do catálogo determina a ordenação dos metadados do sistema, como identificadores de objetos. Você pode especificar as duas ordenações de forma independente ao criar o banco de dados no portal do Azure, no T-SQL com CREATE DATABASE ou no PowerShell com New-AzSqlDatabase.

Para obter detalhes e exemplos, consulte CREATE DATABASE. Especifique uma ordenação para o banco de dados (COLLATE) e uma ordenação de catálogo para metadados do sistema e identificadores de objetos (CATALOG_COLLATION).

Ordenação de catálogo no banco de dados SQL no Microsoft Fabric

Atualmente, por padrão, a ordenação de um banco de dados SQL no Fabric é SQL_Latin1_General_CP1_CI_AS, mas isso pode ser configurado durante a implantação. Não será possível atualizar a ordenação após a implantação. Há suporte para ordenações em colunas individuais. Para obter mais informações sobre opções de implantação, consulte Opções para criar um banco de dados SQL no Fabric.