quinta-feira, 10 de maio de 2012

Alterando COLLATE de várias colunas de um banco de dados SQL 2005

Ao restaurar um banco de dados em ambiente de desenvolvimento, encontrei diversos problemas com o COLLATE, ao comparar com outras bases em desenvolvimento de processos de ETL. Para contornar o problema de maneira rápida, localizei este script para alteração massiva dos campos da base para um determinado COLLATE.


SELECT
'alter table [' + s.name + '].[' + t.name + '] alter column [' + c.name + '] ' +
              ty.name + CASE
                          WHEN ty.name NOT IN ( 'text', 'sysname' ) THEN '(' +
                          CASE
                            WHEN c.max_length > 0 THEN
                              CASE
                                WHEN ty.name NOT IN ( 'nchar', 'nvarchar' ) THEN
                                CONVERT(VARCHAR, c.max_length)
                                ELSE CONVERT(VARCHAR, c.max_length / 2)
                              END
                            ELSE 'max'
                          END + ')'
                          ELSE ''
                        END + ' collate SQL_Latin1_General_CP1_CI_AS ' + CASE
                                                                           WHEN
              c.is_nullable = 0 THEN 'NOT '
                                                                           ELSE
       ''
                                                                         END +
       'NULL'
FROM   (sys.columns c
        INNER JOIN sys.types ty
          ON c.system_type_id = ty.system_type_id)
       INNER JOIN (sys.objects t
                   INNER JOIN sys.schemas s
                     ON t.schema_id = s.schema_id)
         ON c.object_id = t.object_id
WHERE  t.type = 'U'
       AND c.collation_name IS NOT NULL
       AND ty.name <> 'sysname'
ORDER  BY s.name,
          t.name,
          c.column_id

Segue o link para a query original: http://sqlblogcasts.com/blogs/piotr_rodak/archive/2007/12/14/changing-collation-of-all-columns-without-dropping-them.aspx

Abs!

Nenhum comentário:

Postar um comentário

Leave your comment here!