Bruno Perroni
DBA SQL Server com mais de 6 anos de experiência!

Alterando Server Collation

Nesse post iremos aprender a alterar a Collation de um Servidor.

Para quem não sabe, Collation é um parâmetro que é configurado durante a instalação do SQL Server e que determina como a engine do SQL irá tratar os caracteres inseridos no SQL Server. Podemos definir Collation a nível de servidor, database ou coluna. Existem diversos tipos de Collation para serem configurados e uma vez configurado o processo de alteração é um pouco complicado.
A Collation SQL_Latin1_General_CP1_CI_AS por exemplo não distingue maiúsculas e minúsculas, porém diferencia acentuação.

Sem mais delongas vamos ao processo de alteração.

Antes de tudo sugiro realizar um detach de todos os bancos de dados da instância, isso agiliza o processo, podemos fazer isso com o script abaixo, um backup dos bancos de sistema MASTER, MSDB e MODEL também não faz mal pra ninguém.

DECLARE @cont INT
DECLARE @qtde INT
DECLARE @dbname SYSNAME

SET NOCOUNT ON

SELECT NAME AS dbname
INTO #Databases
FROM master..sysdatabases
WHERE dbid >= 5
ORDER BY DBID

SET @qtde = @@ROWCOUNT
SET @cont = 1

PRINT '/*'
PRINT 'DESCRICAO.: Script Dettach_db do Servidor ' + @@SERVERNAME
PRINT 'GERAÇÃO...: ' + convert(VARCHAR(10), getdate(), 103)
PRINT 'AUTHOR....: ' + SYSTEM_USER
PRINT 'DATABASES.: ' + CAST(@qtde AS VARCHAR)
PRINT '*/'

WHILE @qtde >= @cont
BEGIN
       SET ROWCOUNT 1

       SELECT @DBNAME = DBNAME
       FROM #Databases

       DELETE
       FROM #Databases

       SET ROWCOUNT 0
       /*soma 1 no contador*/
       SET @cont = @cont + 1

       PRINT 'USE [master]'
       PRINT 'GO'
       PRINT 'ALTER DATABASE [' + @DBNAME + '] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE'
       PRINT 'GO'
       PRINT 'USE [master]'
       PRINT 'GO'
       PRINT 'EXEC master.dbo.sp_detach_db @dbname=N''' + @DBNAME + ''''
       PRINT 'go'
END

DROP TABLE #Databases

Agora que já realizamos o detach de todas as bases e os backups, vamos ao processo de alteração da Collation.

Primeiramente devemos parar o serviço da instância do SQL Server.


Com o serviço parado, devemos acesse o diretório de instalação do SQL Server e executar o seguinte comando sqlservr -m -T4022 -T3659 -q”SQL_Latin1_General_CP1_CS_AS”

Iremos alterar a collation da instância SQL Server de: SQL_Latin1_General_CP1_CI_AS para: SQL_Latin1_General_CP1_CS_AS

Abaixo podemos ver que a alteração da Collation foi realizada com sucesso.

Agora podemos iniciar novamente o serviço da instância

Conforme abaixo podemos ver a Collation alterada e também já podemos realizar o attach das bases novamente.