Definir ou alterar a ordenação de banco de dados
Aplica-se a: SQL Server
Instância Gerenciada de SQL do Azure
Este artigo descreve como definir ou alterar a ordenação de banco de dados usando o SSMS (SQL Server Management Studio) ou o Transact-SQL. Se nenhuma ordenação for especificada, será usada a ordenação do servidor.
Limitações e restrições
As ordenações somente Unicode do Windows podem ser usadas somente com a cláusula COLLATE para aplicar ordenações aos tipos de dados nchar, nchar, nvarchar e ntext em dados nos níveis de coluna e de expressão. Não é possível usá-las com a cláusula COLLATE para alterar a ordenação de uma instância de banco de dados ou de servidor.
Se a ordenação especificada ou a ordenação usada pelo objeto referenciado usar uma página de código sem suporte no Windows, o Mecanismo de Banco de Dados exibirá um erro.
A ordenação em nível de servidor na Instância Gerenciada de SQL do Azure pode ser especificada quando a instância é criada e não pode ser alterada posteriormente. Saiba mais em Definir ou alterar a ordenação do servidor.
Importante
A instrução ALTER DATABASE COLLATE
não tem suporte no Banco de Dados SQL do Azure. Especifique a ordenação do banco de dados e a ordenação do catálogo no momento de CREATE DATABASE.
Recomendações
Você pode encontrar os nomes de ordenação com suporte no Windows Collation Name (Transact-SQL) e SQL Server Collation Name (Transact-SQL) ou pode usar a função do sistema sys.fn_helpcollations (Transact-SQL).
Ao alterar a ordenação do banco de dados, você altera:
Qualquer coluna char, varchar, text, nchar, nvarchar ou ntext nas tabelas do sistema são alteradas para a nova ordenação.
Todos os parâmetros char, varchar, text, nchar, nvarchar ou ntext e valores de retorno escalar para procedimentos armazenados e funções definidas pelo usuário existentes são alterados para a nova ordenação.
Os tipos de dados do sistema char, varchar, text, nchar, nvarchar ou ntext e todos os tipos de dados definidos pelo usuário com base nesses tipos de dados do sistema são alterados para a nova ordenação padrão.
Você pode alterar a ordenação de qualquer novo objeto que seja criado em um banco de dados de usuário usando a cláusula COLLATE
da instrução ALTER DATABASE. Essa instrução não altera a ordenação das colunas em nenhuma tabela existente definida pelo usuário. Isso pode ser alterado usando a cláusula COLLATE
de ALTER TABLE.
Importante
Alterar a ordenação de um banco de dados ou de colunas individuais não modifica os dados subjacentes já armazenados em tabelas existentes. A menos que o seu aplicativo manipule explicitamente a conversão de dados e a comparação entre diferentes ordenações, é recomendável que você migre os dados existentes no banco de dados para a nova ordenação. Isso elimina o risco de que os aplicativos modifiquem incorretamente os dados, o que decorreria em possíveis resultados incorretos ou na perda de dados silenciosa.
Quando uma ordenação de banco de dados for alterada, somente as novas tabelas herdarão a nova ordenação de banco de dados por padrão. Há várias alternativas para converter dados existentes para a nova ordenação:
Converter os dados in-loco. Para converter a ordenação de uma coluna em uma tabela existente, confira Definir ou alterar a ordenação de colunas. Essa operação é fácil de implementar, mas pode se tornar um problema de bloqueio para grandes tabelas e aplicativos ocupados. Confira o seguinte exemplo de uma conversão in-loco da coluna
MyString
para uma nova ordenação:ALTER TABLE dbo.MyTable ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
Copiar dados para novas tabelas que usam a nova ordenação e substitua as tabelas originais no mesmo banco de dados. Crie uma tabela no banco de dados atual que herdará a ordenação de banco de dados, copie os dados entre a tabela antiga e a nova tabela, remova a tabela original e renomeie a nova tabela com o nome da tabela original. Essa é uma operação mais rápida do que uma conversão in-loco, mas pode se tornar um desafio lidar com esquemas complexos com dependências como restrições de Chave Estrangeira, restrições de Chave Primária e Gatilhos. Ela também exigiria uma sincronização de dados final entre a nova tabela e a original antes do limiar final se os dados continuassem sendo alterados pelos aplicativos. Confira o seguinte exemplo de uma conversão "copiar e substituir" da coluna
MyString
em uma nova ordenação:CREATE TABLE dbo.MyTable2 (MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8); INSERT INTO dbo.MyTable2 SELECT * FROM dbo.MyTable; DROP TABLE dbo.MyTable; EXEC sp_rename 'dbo.MyTable2', 'dbo.MyTable';
Copiar dados para um novo banco de dados que usa a nova ordenação e substitua o banco de dados original. Crie um banco de dados usando a nova ordenação e transfira os dados do banco de dados original com ferramentas como os serviços de integração ou o Assistente de Importação/Exportação no SQL Server Management Studio. Essa é uma abordagem mais simples para esquemas complexos. Ela também exigiria uma sincronização de dados final entre o novo banco de dados e o original antes do limiar final se os dados continuassem sendo alterados pelos aplicativos.
Permissões
A criação de um novo banco de dados requer a permissão CREATE DATABASE
no banco de dados master
ou as permissões CREATE ANY DATABASE
ou ALTER ANY DATABASE
.
A alteração da ordenação de um banco de dados existente requer a permissão ALTER
no banco de dados.
Definir ou alterar a ordenação de banco de dados usando o SSMS
No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados do SQL Server e expanda-a. Em seguida, expanda Bancos de Dados.
Se você estiver criando um banco de dados, clique com o botão direito do mouse em Bancos de Dados e selecione Novo Banco de Dados. Se você não desejar a ordenação padrão, selecione a página Opções e uma ordenação na lista suspensa Ordenação.
De maneira alternativa, se o banco de dados já existir, clique com o botão direito do mouse no banco de dados desejado e selecione Propriedades. Selecione a página Opções e selecione uma ordenação na lista suspensa Ordenação.
Quando tiver terminado, selecione OK.
Definir a ordenação de banco de dados usando o Transact-SQL
Conecte-se ao Mecanismo de Banco de Dados.
Na barra Padrão, selecione Nova Consulta.
Copie e cole o exemplo a seguir na janela de consulta e selecione Executar. Este exemplo mostra como usar a cláusula COLLATE em CREATE DATABASE para especificar um nome de ordenação. O exemplo cria o banco de dados
MyOptionsTest
que usa a ordenaçãoLatin1_General_100_CS_AS_SC
. Depois de criar o banco de dados, execute a instruçãoSELECT
para verificar a configuração.
USE master;
GO
IF DB_ID (N'MyOptionsTest') IS NOT NULL
DROP DATABASE MyOptionsTest;
GO
CREATE DATABASE MyOptionsTest
COLLATE Latin1_General_100_CS_AS_SC;
GO
SELECT name, collation_name
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO
Alterar a ordenação de banco de dados usando o Transact-SQL
Conecte-se ao Mecanismo de Banco de Dados.
Na barra Padrão, selecione Nova Consulta.
Copie e cole o exemplo a seguir na janela de consulta e selecione Executar. Este exemplo mostra como usar a cláusula COLLATE em uma instrução ALTER DATABASE para alterar o nome da ordenação. Execute a instrução
SELECT
para verificar a alteração.
USE master;
GO
ALTER DATABASE MyOptionsTest
COLLATE French_CI_AS ;
GO
SELECT name, collation_name
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO
Próximas etapas
Saiba mais sobre a ordenação:
- Suporte a ordenações e a Unicode
- sys.fn_helpcollations (Transact-SQL)
- sys.databases (Transact-SQL)
- Nome de ordenação do SQL Server (Transact-SQL)
- Nome de ordenação do Windows (Transact-SQL)
- COLLATE (Transact-SQL)
- Precedência de ordenação (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- CREATE DATABASE (SQL Server Transact-SQL)
- ALTER TABLE (Transact-SQL)
- ALTER DATABASE (Transact-SQL)