Compartilhar via


Identificadores de banco de dados

Applies to:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Ponto de extremidade de análise SQL no Microsoft FabricArmazém no Microsoft FabricSQL database no Microsoft Fabric

O nome do objeto de banco de dados é seu 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)
);

Esta tabela tem uma restrição sem nome. A restrição de chave primária não tem nenhum identificador especificado pelo usuário, portanto, o sistema atribui a ele um nome gerado como PK__TableX__D7CB9CCCEEF0806C. Você pode ver esse nome 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 estar em conformidade com as regras para identificadores Transact-SQL.

Classes de identificadores

Há duas classes de identificadores:

  • Identificadores regulares estão em conformidade com as regras de formato para identificadores. Elas não são delimitadas quando usadas em instruções Transact-SQL. Os identificadores regulares devem seguir as regras para identificadores regulares: eles só podem conter letras, dígitos e determinados símbolos (_, @, , #), $devem começar com uma letra ou uma de _, @#e não podem ser uma palavra reservada.

    USE AdventureWorks2025;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Os identificadores delimitados são colocados entre aspas duplas (") ou colchetes ([ e ]). Delimitadores permitem que você use nomes que, de outra forma, seriam inválidos como identificadores regulares, como palavras-chave reservadas, nomes com espaços ou nomes com caracteres especiais. Os identificadores que já estão em conformidade com as regras de identificador regulares também podem ser delimitados, mas os delimitadores são opcionais nesse caso. Para obter mais informações, consulte Regras para identificadores delimitados.

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

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

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.

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 delimitados

Identificadores delimitados estão entre colchetes ([ e ]) ou aspas duplas ("). Eles podem conter qualquer combinação de caracteres, incluindo espaços, palavras-chave reservadas e caracteres especiais que não são permitidos em identificadores regulares.

Identificadores delimitados por colchetes

Identificadores delimitados por colchete são colocados entre colchetes ([ e ]). Se o próprio identificador contiver um colchete à direita (]), escape-o dobrando-o (]]). Um colchete esquerdo ([) não requer escape.

Por exemplo, para criar e consultar uma tabela cujo nome contém colchetes:

-- 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

A QUOTENAME função retorna um identificador delimitado por colchete válido para uma determinada cadeia de caracteres e manipula o escape automaticamente:

SELECT QUOTENAME('abc[]def');

O exemplo anterior retorna [abc[]]def].

Identificadores delimitados por aspas duplas

Identificadores delimitados por aspas duplas são colocados entre aspas duplas ("). Se o identificador em si contiver uma aspa dupla, escape-a dobrando-a ("").

Delimitadores de aspas duplas exigem SET QUOTED_IDENTIFIER ON (o padrão para a maioria das conexões). Quando QUOTED_IDENTIFIER é OFF, o Mecanismo de Banco de Dados trata cadeias de caracteres entre aspas duplas como literais de strings em vez de identificadores. Para saber mais, confira SET QUOTED_IDENTIFIER.

Por exemplo, para criar e consultar uma tabela que usa palavras-chave 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 não afeta identificadores delimitados por colchetes. Delimitadores de colchetes sempre funcionam independentemente da configuração QUOTED_IDENTIFIER.

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 início de um identificador têm um significado especial no Mecanismo de Banco de Dados. 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 os caracteres de sinal de número ou de sinal de número duplo possam ser usados para iniciar os nomes de outros tipos de objetos, você deve evitar essa prática.

      Algumas funções Transact-SQL têm nomes que começam com arrobas duplas (@@). 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 Transact-SQL palavra reservada. O Mecanismo de Banco de Dados reserva as versões maiúsculas e minúsculas 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. Algumas dessas regras variam dependendo do nível de compatibilidade do banco de dados.

Ordenação de catálogo em Banco de Dados SQL do Azure

Não é possível alterar ou definir a ordenação do servidor lógico em 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 independentemente quando criar o banco de dados no portal Azure, no Transact-SQL (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

A ordenação padrão de um banco de dados SQL em Fabric é SQL_Latin1_General_CP1_CI_AS. Você pode configurar uma ordenação diferente no momento da implantação, mas não pode alterá-la depois que o banco de dados é criado. Colunas individuais podem usar suas próprias ordenações. Para obter mais informações sobre opções de implantação, consulte Options para criar um banco de dados SQL no Fabric.