COLLATE (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Warehouse do PDW (Analytics Platform System)no Microsoft Fabric
Define uma ordenação de uma coluna de banco de dados ou de tabela ou uma operação de conversão de ordenação quando aplicado a uma expressão de cadeia de caracteres. O nome da ordenação pode ser um nome de ordenação do Windows ou um nome de ordenação SQL. Se ele não for especificado durante a criação do banco de dados, a ordenação padrão da instância do SQL Server será atribuída ao banco de dados. Se ele não for especificado durante a criação da coluna de tabela, a ordenação padrão do banco de dados será atribuída à coluna.
Convenções de sintaxe de Transact-SQL
Sintaxe
COLLATE { <collation_name> | database_default }
<collation_name> ::=
{ Windows_collation_name } | { SQL_collation_name }
Argumentos
collation_name É o nome da ordenação a ser aplicada à expressão, definição de coluna ou definição de banco de dados. collation_name pode ser apenas um Windows_collation_name ou um SQL_collation_name especificado. collation_name deve ser um valor literal. collation_name não pode ser representado por uma variável ou expressão.
Windows_collation_name é o nome de ordenação de um Nome de Ordenação do Windows.
SQL_collation_name é o nome de ordenação de um Nome de Ordenação do SQL Server.
Observação
No Microsoft Fabric, a única ordenação permitida é: Latin1_General_100_BIN2_UTF8.
database_default Faz com que a cláusula COLLATE herde a ordenação do banco de dados atual.
Comentários
A cláusula COLLATE pode ser especificada em vários níveis. Isso inclui o seguinte:
Criando ou alterando um banco de dados.
Você pode usar a cláusula COLLATE da instrução
CREATE DATABASE
ouALTER DATABASE
para especificar a ordenação padrão do banco de dados. Também é possível especificar uma ordenação ao criar um banco de dados usando SQL Server Management Studio. Se você não especificar uma ordenação, o banco de dados recebe a ordenação padrão da instância do SQL Server.Observação
As ordenações somente Unicode do Windows só podem ser usadas com a cláusula COLLATE para aplicar ordenações aos tipos de dados nchar, nvarchare tipos de dados ntext em dados de nível de coluna e de expressão; elas não podem ser usadas com a cláusula COLLATE para definir ou alterar a ordenação de um banco de dados ou instância de servidor.
Criando ou alterando uma coluna de tabela.
Você pode especificar ordenações para cada coluna de cadeia de caracteres usando a cláusula COLLATE da instrução
CREATE TABLE
ouALTER TABLE
. Também é possível especificar uma ordenação ao criar uma tabela usando SQL Server Management Studio. Se você não especificar uma ordenação, a coluna recebe a ordenação padrão do banco de dados.Você também pode usar a opção
database_default
na cláusula COLLATE para especificar que uma coluna em uma tabela temporária use o padrão de ordenação do banco de dados de usuário atual para a conexão em vez detempdb
.Convertendo a ordenação de uma expressão.
Você pode usar a cláusula COLLATE para aplicar uma expressão de caractere a uma determinada ordenação. Literais de caracteres e variáveis são atribuídos à ordenação padrão do banco de dados atual. Referências de coluna são atribuídas à ordenação de definição da coluna.
A ordenação de um identificador depende do nível em que ele é definido. Os identificadores de objetos no nível de instância, como logons e nomes de banco de dados, são atribuídos à ordenação padrão da instância. Os identificadores de objetos em um banco de dados, como tabelas, exibições e nomes de coluna, são atribuídos à ordenação padrão do banco de dados. Por exemplo, duas tabelas com nomes diferentes somente no caso podem ser criadas em um banco de dados com ordenação que diferencia maiúsculas de minúsculas, mas podem não ser criadas em um banco de dados com ordenação que não diferencia maiúsculas de minúsculas. Para obter mais informações, consulte Database Identifiers.
Variáveis, rótulos GOTO, procedimentos armazenados temporários e tabelas temporárias podem ser criados quando o contexto de conexão é associado a um banco de dados e, em seguida, referenciado quando o contexto é alternado para outro banco de dados. Os identificadores para variáveis, os rótulos GOTO, os procedimentos armazenados temporários e as tabelas temporárias estão na ordenação padrão da instância de servidor.
A cláusula COLLATE pode ser aplicada apenas aos tipos de dados char, varchar, text, nchar, nvarchar e ntext.
COLLATE usa collate_name para referenciar o nome da ordenação do SQL Server ou do Windows a ser aplicada à expressão, à definição de coluna ou à definição de banco de dados. collation_name pode ser somente um Windows_collation_name ou SQL_collation_name especificado e o parâmetro deve conter um valor literal. collation_name não pode ser representado por uma variável ou expressão.
Geralmente, as ordenações são identificadas por um nome de ordenação, exceto na Instalação. Na Instalação, especifique o designador de ordenação raiz (a localidade da ordenação) para ordenações do Windows e, em seguida, especifique opções de classificação que diferenciam ou não maiúsculas e minúsculas ou caracteres com ou sem acentos.
Você pode executar a função de sistema fn_helpcollations para recuperar uma lista de todos os nomes de ordenações válidos para ordenações do Windows e SQL Server:
SELECT name, description
FROM fn_helpcollations();
O SQL Server só pode aceitar páginas de código que tenham suporte no sistema operacional subjacente. Quando você executa uma ação que depende de ordenações, a ordenação do SQL Server usada pelo objeto referenciado deve usar uma página de código com suporte no sistema operacional executado no computador. Essas ações podem incluir o seguinte:
- Especificando uma ordenação padrão para um banco de dados ao criar ou alterar o banco de dados.
- Especificando uma ordenação para uma coluna ao criar ou alterar uma tabela.
- Ao restaurar ou anexar um banco de dados, a ordenação padrão do banco de dados e a ordenação de qualquer coluna ou parâmetro char, varchar e text no banco de dados devem ser compatíveis com o sistema operacional.
Observação
Há suporte para conversões de página de código em tipos de dados char e varchar, mas não no tipo de dados text. A perda de dados durante traduções de página de código não é relatada.
Se a ordenação especificada ou a ordenação usada pelo objeto referenciado usar uma página de código não compatível com o Windows, o SQL Server exibirá um erro.
Exemplos
a. Especificando a ordenação durante uma instrução SELECT
O exemplo a seguir cria uma tabela simples e insere 4 linhas. Depois, o exemplo aplica duas ordenações ao selecionar dados da tabela, demonstrando como Chiapas
é classificado de forma diferente.
CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas'),('Colima')
, ('Cinco Rios'), ('California');
GO
--Apply a typical collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Latin1_General_CS_AS_KS_WS ASC;
GO
-- Apply a Spanish collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Traditional_Spanish_ci_ai ASC;
GO
-- Using LIKE
SELECT Place FROM Locations
WHERE Place COLLATE Latin1_General_CI_AS LIKE 'C%' ASC;
GO
Aqui estão os resultados da primeira consulta SELECT
.
Place
-------------
California
Chiapas
Cinco Rios
Colima
Aqui estão os resultados da segunda consulta SELECt
.
Place
-------------
California
Cinco Rios
Colima
Chiapas
Aqui estão os resultados da terceira consulta SELECt
.
Place
-------------
Chiapas
Colima
Cinco Rios
California
B. Mais exemplos
Para obter mais exemplos que usam COLLATE, confira CREATE DATABASE, exemplo G. Criando um banco de dados e especificando um nome de ordenação e opções e ALTER TABLE, exemplo V. Alterando uma ordenação de coluna.