alterar Agrupamento de banco de dados do SQL Server

pode chegar um momento em que você precisará alterar seu banco de dados para usar um agrupamento diferente.

Você pode fazer isso usando o seguinte trecho de:

USE master;GOALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS ;GO--Verify the collation setting.SELECT name, collation_nameFROM sys.databasesWHERE name = N'';GO

Quando você executar o trecho acima, você pode se deparar com o seguinte erro:

O banco de dados não pôde ser bloqueada exclusivamente para executar a operação

Este erro ocorre quando o banco de dados está no modo de Multi-Utilizador ou quando há objetos referindo-se ao seu banco de dados.

Para superar esse erro, você precisa executar as seguintes etapas:

  1. Defina o banco de dados para o modo de usuário único;
  2. Realizar as alterações necessárias ao seu banco de dados, no caso de alteração de agrupamento;
  3. Definir o banco de dados de volta para o modo multi-usuário.

Assim, o trecho acima pode ser atualizado para o seguinte:

USE master;GO-- Set to single-user modeALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEGO -- change collationALTER DATABASE COLLATE SQL_Latin1_General_CP1_CI_AS; GO -- Set to multi-user modeALTER DATABASE SET MULTI_USER WITH ROLLBACK IMMEDIATE;GO --Verify the collation setting. SELECT name, collation_name FROM sys.databases WHERE name = N'MyOptionsTest'; GO

O processo acima pode ser usado se você tiver acabado de criar um novo banco de dados, sem dados, sem definir o desejado agrupamento de banco de dados.

alterar agrupamento para colunas de tabela

em seu banco de dados, pode haver colunas de tabela com diferentes agrupamentos, ou seja, colunas de tabela dos tipos char, varchar, text, nchar, nvarchar e ntext. Para listar todas as colunas da tabela com suas colações atuais, você pode executar a seguinte consulta:

SELECT t.name, c.name, c.collation_nameFROM sys.columns c INNER JOIN sys.tables t ON t.object_id = c.object_idWHERE c.object_id IN (SELECT object_id FROM sys.objects WHERE type = 'U') AND c.collation_name != 'NULL'ORDER BY t.name, c.name

Antes de fazer qualquer alteração nos agrupamentos dessas colunas, você precisa verificar se as alterações gerarão problemas para os aplicativos.

para alterar um agrupamento de colunas para um novo, você pode executar a seguinte consulta:

ALTER TABLE ALTER COLUMN <ColumnType> COLLATE <NewCollation>

em caso de erro, certifique-se de que as restrições e índices de referência sejam descartados; você pode recriá-los após a alteração do Agrupamento.

alterar agrupamento e dados existentes

e os seus dados existentes? Para ter certeza de que os dados existentes são recuperáveis após a alteração do agrupamento, você precisa seguir as etapas abaixo:

  1. exporte dados antigos de cada tabela, usando o Assistente de Importação E Exportação de dados do SQL Server ou o BCP;
  2. solte e recrie as tabelas; e
  3. importe dados exportados anteriormente.

no exemplo a seguir, criaremos um banco de dados com agrupamento LATIN1_GENERAL_CI_AI, adicionaremos uma tabela Produtos com um nome de coluna (nvarchar(50)) e inseriremos alguns dados em grego.

CREATE DATABASE COLLATE LATIN1_GENERAL_CI_AI;-- -- Create Products table and add some dataUSE GOCREATE TABLE .( (50) NULL) ON GOinsert into dbo.Products (name) values (N'Προϊόν 1');insert into dbo.Products (name) values (N'Προϊόν 2');insert into dbo.Products (name) values (N'Προϊόν 3');insert into dbo.Products (name) values (N'Προϊόν 4');insert into dbo.Products (name) values (N'Προϊόν 5');

procurando por todos os produtos que começam com ” προόόν “(palavra grega para produto), obtemos 5 resultados:

SELECT *FROM dbo.ProductsWHERE Name LIKE N'Προϊόν%';-- Results:Name--------------------------------------------------Προϊόν 1Προϊόν 2Προϊόν 3Προϊόν 4Προϊόν 5

Etapa 1. Exportar dados

vamos exportar dados na tabela de produtos usando o bcp, que significa bulk copy program utility (BCP) e bulk copies data entre uma instância do Microsoft SQL Server e um arquivo de dados em um formato especificado pelo Usuário. Este utilitário pode ser usado para importar um grande número de novas linhas em tabelas do SQL Server ou para exportar dados de tabelas para o arquivo adata. Para fazer isso, temos o seguinte comando:

bcp CollationTest.dbo.Products out Products.txt -c -T

onde -c executa a operação usando um tipo de dados de caractere e -T especifica que o utilitário bcp se conecta ao SQL Server com uma conexão confiável usando segurança integrada.

Passo 2. Altere o Agrupamento de banco de dados

na próxima etapa, alteraremos o agrupamento de banco de dados para GREEK_CI_AI, com a seguinte instrução:

-- Alter database collationALTER DATABASE COLLATE GREEK_CI_AI;

Etapa 3. Solte e recrie a tabela de produtos

USE GODROP TABLE .;GOCREATE TABLE .( (50) NULL) ON GO

Etapa 4. Importar dados exportados anteriormente

para fazer isso, usaremos novamente o utilitário bcp, mas em vez do parâmetro out usaremos o parâmetro in :

bcp CollationTest.dbo.Products in Products.txt -c -T

Deixe uma resposta

O seu endereço de email não será publicado.