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!