Compartilhar via


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

  1. 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.

  2. 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.

  3. Quando tiver terminado, selecione OK.

Definir a ordenação de banco de dados usando o Transact-SQL

  1. Conecte-se ao Mecanismo de Banco de Dados.

  2. Na barra Padrão, selecione Nova Consulta.

  3. 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ção Latin1_General_100_CS_AS_SC. Depois de criar o banco de dados, execute a instrução SELECT 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

  1. Conecte-se ao Mecanismo de Banco de Dados.

  2. Na barra Padrão, selecione Nova Consulta.

  3. 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: