Definir ou alterar a ordenação de banco de dados

Aplica-se a:SQL ServerInstâ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 do 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 de banco de dados e a ordenação de 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 o Integration Services 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

Para criar um novo banco de dados, requer CREATE DATABASE permissão no master banco de dados ou requer CREATE ANY DATABASEpermissão 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, expanda essa instância e 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: