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 de banco de dados for especificada, será usada a ordenação do servidor.

Recomendações

Você pode encontrar os nomes de ordenação com suporte no Nome de Ordenação do Windows e no Nome de Ordenação do SQL Server ou pode usar a função do sistema sys.fn_helpcollations.

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.

Permissões

A criação de um novo banco de dados exige 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

Você pode definir ou alterar a ordenação de banco de dados usando o SSMS (SQL Server Management Studio) ou o Transact-SQL (T-SQL).

Você pode especificar a ordenação de um novo banco de dados ou atualizar a ordenação de um banco de dados existente usando o SSMS (SQL Server Management Studio).

No SQL Server Management Studio, abra Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados do SQL Server e expanda-a e depois expanda Bancos de Dados:

  • Para um novo 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.
  • Para um banco de dados existente: 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.

Dados após alterar a ordenação

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.

Limitaçõ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.