Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Base de Dados SQL do Azure
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics endpoint em Microsoft Fabric
Warehouse em Microsoft Fabric
SQL database em Microsoft Fabric
O nome do objeto da base de dados é o 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 requer identificadores, mas para alguns objetos, como as restrições, os identificadores são opcionais.
Cria-se um identificador de objeto quando se define o objeto. Use o identificador para referenciar o objeto. Por exemplo, a instrução a seguir 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 identificador especificado pelo utilizador, pelo que o sistema atribui-lhe um nome gerado como PK__TableX__D7CB9CCCEEF0806C. Pode ver este nome em visualizações de metadados do sistema como sys.key_constraints.
Os nomes das restrições e outros objetos com âmbito de esquema devem ser únicos dentro de um esquema de base de dados. Por exemplo, duas restrições principais de chave não podem partilhar um nome. No entanto, os nomes das colunas só precisam de ser únicos dentro de cada tabela, não dentro do esquema.
A ordenação de um identificador depende do nível em que é definido.
A colação padrão da instância é atribuída a identificadores de objetos ao nível da instância, como logins e nomes de bases de dados.
A ordenação padrão da base de dados é atribuída a identificadores de objetos, como tabelas, vistas e nomes de colunas. Por exemplo, pode criar duas tabelas com nomes que diferem apenas no caso numa base de dados que tenha colação sensível a maiúsculas e minúsculas, mas não pode criá-las numa base de dados que tenha colação insensível a maiúsculas e minúsculas.
Note
Os nomes das variáveis, ou os parâmetros das funções e procedimentos armazenados, devem cumprir as regras para identificadores Transact-SQL.
Classes de identificadores
Existem duas classes de identificadores:
Identificadores regulares cumprem as regras de formato para identificadores. Não são delimitadas quando usadas em instruções Transact-SQL. Os identificadores normais devem seguir as regras dos identificadores regulares: só podem conter letras, dígitos e certos 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 estão entre aspas duplas (
") ou parênteses ([e]). Os delimitadores permitem-lhe usar nomes que, de outra forma, seriam inválidos como identificadores regulares, como palavras-chave reservadas, nomes com espaços ou nomes com caracteres especiais. Identificadores que já cumprem as regras regulares de identificadores também podem ser delimitados, mas nesse caso os delimitadores são opcionais. Para mais informações, consulte Regras para identificadores delimitados.USE AdventureWorks2025; GO SELECT * FROM [HumanResources].[Employee] --Delimiter is optional. WHERE [NationalIDNumber] = 153479919; --Delimiter is optional.
Identificadores que não cumprem as regras para identificadores normais devem ser delimitados numa 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.
Os identificadores regulares e 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
Os identificadores delimitados estão entre parênteses ([ e ]) ou entre aspas duplas ("). Podem conter qualquer combinação de caracteres, incluindo espaços, palavras-chave reservadas e caracteres especiais que não são permitidos em identificadores normais.
Identificadores delimitados por parênteses
Os identificadores delimitados por parênteses estão incluídos entre parênteses quadrados ([ e ]). Se o próprio identificador contiver um colchete à direita (]), escape-o ao duplicá-lo (]]). Um suporte esquerdo ([) não precisa de escapar.
Por exemplo, para criar e consultar uma tabela cujo nome contém parênteses:
-- 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 devolve um identificador válido delimitado por parênteses para uma dada cadeia e trata automaticamente do escape:
SELECT QUOTENAME('abc[]def');
O exemplo anterior devolve [abc[]]def].
Identificadores delimitados por aspas duplas
Os identificadores delimitados por aspas duplas estão incluídos entre aspas duplas ("). Se o próprio identificador contiver aspas duplas, escapa duplicando ("").
Os delimitadores de aspas duplas requerem SET QUOTED_IDENTIFIER ON (o padrão para a maioria das conexões). Quando QUOTED_IDENTIFIER é OFF, o Database Engine trata as cadeias com aspas duplas como literais de cadeia em vez de identificadores. Para obter mais informações, consulte SET QUOTED_IDENTIFIER.
Por exemplo, criar e consultar uma tabela que use 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 parênteses. Os delimitadores de bracket funcionam sempre, independentemente da QUOTED_IDENTIFIER definição.
Regras para identificadores regulares
Os nomes das variáveis, funções e procedimentos armazenados devem seguir estas regras para identificadores Transact-SQL.
O primeiro carácter deve ser um dos seguintes caracteres:
Uma letra conforme definido pela Norma Unicode 3.2. A definição Unicode de letras inclui caracteres latinos de
aatéz, deAatéZ, e também caracteres de letras de outros idiomas.O sublinhado (
_), no sinal (@), ou no sinal numérico (#).Certos símbolos no início de um identificador têm um significado especial no Database Engine. Um identificador regular que começa com o sinal at sempre indica uma variável ou parâmetro local e não pode ser usado como o nome de qualquer outro tipo de objeto. Um identificador que começa com um sinal numérico indica uma tabela ou procedimento temporário. Um identificador que começa com sinais numéricos duplos (
##) indica um objeto temporário global. Embora os caracteres do signo numérico ou do sinal duplo possam ser usados para começar os nomes de outros tipos de objetos, deve evitar esta prática.Algumas funções Transact-SQL têm nomes que começam por signos duplos em (
@@). Para evitar confusão com estas funções, não use nomes que comecem por@@.
Os caracteres subsequentes podem incluir a seguinte lista:
Letras conforme definido na Norma Unicode 3.2.
Números decimais do latim básico ou de outros alfabetos nacionais.
O sinal de arroba (
@), cifrão ($), sinal numérico (#), ou sublinhado (_).
O identificador não pode ser uma palavra reservada no Transact-SQL. O Database Engine reserva tanto as versões maiúsculas como minúsculas das palavras reservadas. Quando usar identificadores em instruções Transact-SQL, delimite identificadores que não cumprem estas regras usando aspas duplas ou parênteses. As palavras reservadas dependem do nível de compatibilidade do banco de dados. Defina o nível de compatibilidade da base de dados usando a instrução ALTER DATABASE compatibility level .
Não uses espaços embutidos ou caracteres especiais.
Não uses personagens suplementares.
Quando usar identificadores em instruções Transact-SQL, delimite identificadores que não cumprem estas regras usando aspas duplas ou parênteses. Algumas destas regras variam consoante o nível de compatibilidade da base de dados.
Colação de catálogo no Banco de Dados SQL do Azure
Não podes alterar ou definir a colação lógica do servidor no Base de Dados SQL do Azure. No entanto, você pode configurar os agrupamentos de cada banco de dados separadamente para dados no banco de dados e para catálogo. O agrupamento de catálogo determina o agrupamento de metadados do sistema, como identificadores de objeto. Pode especificar ambas as colações de forma independente quando criar a base de dados no portal Azure, em Transact-SQL (T-SQL) com CREATE DATABASE, ou no PowerShell com New-AzSqlDatabase.
Para obter detalhes e exemplos, consulte CREATE DATABASE. Especifique um agrupamento para o banco de dados (COLLATE) e um agrupamento de catálogo para metadados do sistema e identificadores de objeto (CATALOG_COLLATION).
Compilação de catálogos numa base de dados SQL no Microsoft Fabric
A colação padrão de uma base de dados SQL em Fabric é SQL_Latin1_General_CP1_CI_AS. Podes configurar uma compilação diferente no momento da implementação, mas não podes alterá-la depois de a base de dados estar criada. As colunas individuais podem usar as suas próprias colações. Para mais informações sobre opções de implementação, consulte Opções para criar uma base de dados SQL em Fabric.