COLLATE (Transact-SQL)

É uma cláusula que pode ser aplicada a uma definição de banco de dados ou de coluna para definir o agrupamento ou a uma expressão de cadeia de caracteres ao aplicar uma conversão de agrupamento.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

COLLATE { <collation_name> | database_default }
<collation_name> :: = 
     { Windows_collation_name } | { SQL_collation_name }

Argumentos

  • collation_name
    É o nome do agrupamento a ser aplicado à expressão, definição de coluna ou definição de banco de dados. collation_name só pode ser um Windows_collation_name especificado ou um SQL_collation_name. 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 agrupamento para um Nome de Agrupamento do Windows.

    SQL_collation_name é o nome de agrupamento de um Nome de Agrupamento do SQL Server.

    Ao aplicar um agrupamento no nível de definição do banco de dados, não é possível usar agrupamentos do Windows somente Unicode com a cláusula COLLATE.

  • database_default
    Faz com que a cláusula COLLATE herde o agrupamento do banco de dados atual.

Comentários

A cláusula COLLATE pode ser especificada em vários níveis. Eles incluem o seguinte:

  1. Criando ou alterando um banco de dados.

    É possível usar a cláusula COLLATE da instrução CREATE DATABASE ou ALTER DATABASE para especificar o agrupamento padrão do banco de dados. Também é possível especificar um agrupamento ao criar um banco de dados usando SQL Server Management Studio. Se um agrupamento não for especificado, o banco de dados será atribuído ao agrupamento padrão da instância do SQL Server.

    ObservaçãoObservação

    Agrupamentos do Windows somente Unicode podem ser usados com a cláusula COLLATE somente para aplicar agrupamentos aos tipos de dados nchar, nvarchar e ntext em dados nos níveis de coluna e de expressão; não é possível usá-los com a cláusula COLLATE para alterar o agrupamento de uma instância de banco de dados ou de servidor.

  2. Criando ou alterando uma coluna de tabela.

    Você pode especificar agrupamentos para cada coluna de cadeia de caracteres usando a cláusula COLLATE da instrução CREATE TABLE ou ALTER TABLE. Também é possível especificar um agrupamento ao criar uma tabela usando SQL Server Management Studio. Se um agrupamento não for especificado, a coluna será atribuída ao agrupamento padrão do banco de dados.

    Também é possível usar a opção database_default na cláusula COLLATE para especificar que uma coluna de uma tabela temporária use o padrão de agrupamento do banco de dados de usuário atual para a conexão em vez de tempdb.

  3. Convertendo o agrupamento de uma expressão.

    Você pode usar a cláusula COLLATE para aplicar uma expressão de caractere a um determinado agrupamento. Literais de caracteres e variáveis são atribuídos ao agrupamento padrão do banco de dados atual. Referências de coluna são atribuídas ao agrupamento de definição da coluna. Para obter o agrupamento de uma expressão, consulte Precedência de agrupamento (Transact-SQL).

O agrupamento de um identificador depende do nível em que está definido. Os identificadores de objetos no nível de instância, como logons e nomes de banco de dados, são atribuídos ao agrupamento 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 ao agrupamento padrão do banco de dados. Por exemplo, duas tabelas com nomes que diferem apenas em maiúsculas e minúsculas podem ser criadas em um banco de dados que possui agrupamento que diferencia maiúsculas e minúsculas, mas não podem ser criadas em um banco de dados com um agrupamento que não faz essa diferenciação. Para obter mais informações, consulte Identificadores.

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 no agrupamento padrão da instância de servidor.

A cláusula COLLATE pode ser aplicada apenas para os tipos de dados char, varchar, text, nchar, nvarchar e ntext.

COLLATE usa collate_name para fazer referência ao nome do agrupamento do SQL Server ou do Windows que será aplicado à expressão, à definição de coluna ou à definição do banco de dados. collation_name pode ser apenas um Windows_collation_name or a SQL_collation_name e o parâmetro deve conter um valor literal. collation_name não pode ser representado por uma variável ou expressão.

Geralmente, os agrupamentos são identificados por um nome de agrupamento, exceto na Instalação. Na Instalação, você especifica o designador de agrupamento raiz (a localidade do agrupamento) para agrupamentos do Windows e, em seguida, especifica as 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 agrupamentos válidos para agrupamentos do Windows e SQL Server:

SELECT *
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 agrupamentos, o agrupamento do SQL Server usado 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 um agrupamento padrão para um banco de dados ao criar ou alterar o banco de dados.

  • Especificando um agrupamento para uma coluna ao criar ou alterar uma tabela.

  • Ao restaurar ou anexar um banco de dados, o agrupamento padrão do banco de dados e o agrupamento de qualquer coluna ou parâmetro char, varchar e text no banco de dados devem ter suporte no sistema operacional.

    Conversões de página de código têm suporte em tipos de dados char e varchar, mas não em tipo de dados text. A perda de dados durante traduções de página de código não é informada.

Se o agrupamento especificado ou o agrupamento usado pelo objeto referenciado usar uma página de código sem-suporte no Windows, o SQL Server exibirá um erro.

Exemplos

A. Especificando agrupamento durante uma seleção

O exemplo a seguir cria uma tabela simples e insere 4 linhas. Em seguida, o exemplo aplica dois agrupamentos ao selecionar dados da tabela, demonstrando como o Chiapas é classificado diferentemente.

CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas');
INSERT Locations(Place) VALUES ('Colima');
INSERT Locations(Place) VALUES ('Cinco Rios');
INSERT Locations(Place) VALUES ('California');
GO
--Apply an 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

B. Exemplos adicionais

Para obter exemplos adicionais que usam COLLATE, consulte o exemplo CREATE DATABASE (Transact-SQL)G. Criando um banco de dados e especificando um nome de agrupamento e as opções e ALTER TABLE (Transact-SQL) o exemplo V. Alterando agrupamento de coluna.