SQL Server, ideas y experiencias

Cambiar el COLLATION de una base de datos y todas las columnas

por Jose Mariano Alvarez 11. noviembre 2011

Existen ocasiones en las cuales  el collation de la base de datos no coincide con el del servidor. Si bien existe la posibilidad de utilizar ALTER DATABASE para cambiar el collation esto no resuelve todos los problemas porque internamente las tablas pueden tener columnas con un collation diferente al del servidor, y cambiarlas impone más desafíos.

Una de las posibles consecuencias que se producen bajo estas circunstancias, es que al ser diferentes los collations, se debe utilizar la sintaxis COLLATE por ejemplo para hacer un join entre una tabla temporal con el collation de la instancia y una tabla dentro de la base de datos con diferente collation. Esto en ocasiones invalida la utilización de índices y produce menor rendimiento. Por este y otros motivos a veces nos vemos forzados a modificar todas las tablas que tienen columnas con un collation diferente al del servidor, y hacerlo homogeneo e idéntico al del servidor. Para realizar esta tarea tediosa en ocasiones se requiere eliminar las restricciones FK, VIEW, TIGGERS,  y otros elementos relacionados con la tabla, antes de realizar las modificaciones al collation con ALTER TABLE y luego recrearlos.

El script de PowerShell que pueden encontrar en el siguiente enlace les permite resolver esta tarea mediante objetos SMO y PowerShell. Para ello deben tener instalado al menos la versión 2 de PowerShell y los componentes clientes del SQL server 2008 o SQL server 2008 R2.

Artículo en Ingles

http://sqlblogcasts.com/blogs/martinbell/archive/2011/03/07/Changing-Database-Collations-with-Powershell.aspx?CommentPosted=true#commentmessage

Fuente del Script que cambia el collation

http://sqlblogcasts.com/blogs/martinbell/Powershell/Change-Collation.ps1.txt

IMPORTANTE

Es un excelente script que he utilizado en dos ocasiones y ha funcionado a la perfección.  Sin embargo al momento de escribir este post existe un pequeño error en el script que se repite dentro de todas las funciones que generan los scripts TSQL que reconstruyen al final (FK, VIEW, etc) y que solo se produce cuando se ejecuta el script para realizar el cambio mediante autenticación SQL Server utilizando un usuario y password de SQL Server.

Solución

Para resolver este prblema, en TODAS las líneas donde dice

$Scripter=New-Object ("Microsoft.SqlServer.Management.Smo.Scripter") ($srv.Name)  ;

Debe decir

$Scripter=New-Object ("Microsoft.SqlServer.Management.Smo.Scripter") ($srv)

El constructor del objeto  “Smo.Scripter” tiene como parámetro un objeto “Smo.Server” y si no es válido usa las credenciales de Windows para intentar conectarse.

Tags: ,

Artículos

Añadir comentario


(Mostrará su icono Gravatar )

  Country flag

biuquote
  • Comentario
  • Vista previa
Loading



Powered by SQL Total Consulting


View Jose Mariano Alvarez's profile on LinkedIn

 Add to Technorati Favorites 

Calendar

<<  febrero 2012  >>
lumamijuvido
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

View posts in large calendar

Locations of visitors to this page


Valid XHTML 1.0 Transitional

Valid CSS!