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.
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:
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çã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.
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.
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.
Consulte também