Professional Documents
Culture Documents
LATIN1_GENERAL_CI_AS
use [BASE_67]
go
--Validar a alteração
SELECT NAME, COLLATION_NAME FROM SYS.DATABASES WHERE NAME = 'BASE_67'
GO
--verificar as colunas que temos no formato texto para alterarmos o collation uma
a uma
SELECT
C.NAME AS 'COLUNA',
T.NAME AS 'TABELA',
C.COLLATION_NAME
FROM SYS.columns AS C
INNER JOIN SYS.tables AS T ON C.object_id = T.object_id
WHERE collation_name IS NOT NULL
AND T.TYPE = 'U'
ORDER BY 2;
GO
-----------------------------------------------------------------------------------
--------------------------------
--Script para alterar a collation de todas as colunas (e dependências) que estejam
com o Collation diferente do database
SET NOCOUNT ON
-------------------------------------------------------------------------
-- Identifica as colunas com collation diferente do padrão do database conectado
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-- Identifica os índices que utilizam essas colunas
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-- Gera os scripts
-------------------------------------------------------------------------
DECLARE
@CmdAlterTable VARCHAR(MAX) = '',
@Fl_Debug BIT = 1
SELECT
@CmdDropIndex += (CASE WHEN is_unique_constraint = 0 AND is_primary_key = 0
THEN 'DROP INDEX [' + index_name + '] ON [' + [schema_name] + '].[' + table_name +
']; ' ELSE '' END),
@CmdDropIndexConstraint += (CASE WHEN is_unique_constraint = 1 OR
is_primary_key = 1 THEN 'ALTER TABLE [' + [schema_name] + '].[' + table_name + ']
DROP CONSTRAINT [' + index_name + ']; ' ELSE '' END),
@CmdDisableCK += 'ALTER TABLE [' + [schema_name] + '].[' + table_name + ']
NOCHECK CONSTRAINT ALL; ',
@CmdEnableCK += 'ALTER TABLE [' + [schema_name] + '].[' + table_name + '] CHECK
CONSTRAINT ALL; '
FROM
#Indices_Alteracao
-------------------------------------------------------------------------
-- Identifica AS FK's que utilizam essas colunas
-------------------------------------------------------------------------
SELECT
@CmdDropFK += N'ALTER TABLE ' + QUOTENAME(C.[name]) + '.' + QUOTENAME(B.[name])
+ ' DROP CONSTRAINT ' + QUOTENAME(A.[name]) + ';'
FROM
sys.foreign_keys AS A
JOIN sys.tables AS B ON A.parent_object_id = B.[object_id]
JOIN sys.schemas AS C ON B.[schema_id] = C.[schema_id]
JOIN #Tabelas AS D ON B.[object_id] = D.table_object_id
SELECT
@CmdCreateFK += N'ALTER TABLE ' + QUOTENAME(H.[name]) + '.' + QUOTENAME(G.
[name]) + ' ADD CONSTRAINT ' + QUOTENAME(D.[name]) + ' FOREIGN KEY (' +
STUFF((
SELECT
',' + QUOTENAME(A.[name])
FROM
sys.columns AS A
INNER JOIN sys.foreign_key_columns AS B ON B.parent_column_id =
A.column_id AND B.parent_object_id = A.[object_id]
WHERE
B.constraint_object_id = D.[object_id]
ORDER BY
B.constraint_column_id
FOR XML PATH(N''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'') + ')
REFERENCES ' + QUOTENAME(F.[name]) + '.' + QUOTENAME(E.[name]) + '(' +
STUFF((
SELECT
',' + QUOTENAME(C.[name])
FROM
sys.columns AS C
INNER JOIN sys.foreign_key_columns AS fkc ON fkc.referenced_column_id =
C.column_id AND fkc.referenced_object_id = C.[object_id]
WHERE
fkc.constraint_object_id = D.[object_id]
ORDER BY
fkc.constraint_column_id
FOR XML PATH(N''), TYPE
).value(N'.[1]', N'nvarchar(max)'), 1, 1, N''
) + ');'
FROM
sys.foreign_keys AS D
JOIN sys.tables AS E ON D.referenced_object_id = E.[object_id]
JOIN sys.schemas AS F ON E.[schema_id] = F.[schema_id]
JOIN sys.tables AS G ON D.parent_object_id = G.[object_id]
JOIN sys.schemas AS H ON G.[schema_id] = H.[schema_id]
JOIN #Tabelas AS I ON G.[object_id] = I.table_object_id
WHERE
E.is_ms_shipped = 0
AND G.is_ms_shipped = 0
SELECT
@CmdCreateIndex += (CASE WHEN B.is_unique_constraint = 0 AND B.is_primary_key =
0 THEN 'CREATE ' + (CASE WHEN B.is_unique = 1 THEN 'UNIQUE ' ELSE '' END) + B.
[type_desc] COLLATE DATABASE_DEFAULT + ' INDEX [' + B.[name] + '] ON [' +
SCHEMA_NAME(C.[schema_id]) + '].[' + C.[name] + '] (' + E.KeyColumns + ')' +
ISNULL(' INCLUDE (' + I.IncludedColumns + ')', '') + ISNULL(' WHERE ' +
B.filter_definition, '') + ' WITH (' + CASE WHEN B.is_padded = 1 THEN 'PAD_INDEX =
ON' ELSE 'PAD_INDEX = OFF' END + ', ' + 'FILLFACTOR = ' + CONVERT(VARCHAR(5), CASE
WHEN B.fill_factor = 0 THEN 100 ELSE B.fill_factor END) + ', ' +
'SORT_IN_TEMPDB = OFF, ' + (CASE WHEN B.[ignore_dup_key] = 1 THEN
'IGNORE_DUP_KEY = ON' ELSE 'IGNORE_DUP_KEY = OFF' END) + ', ' + (CASE WHEN
F.no_recompute = 0 THEN 'STATISTICS_NORECOMPUTE = OFF' ELSE 'STATISTICS_NORECOMPUTE
= ON' END) + ', ' +
'ONLINE = OFF, DATA_COMPRESSION = PAGE, ' + (CASE WHEN B.[allow_row_locks] = 1
THEN 'ALLOW_ROW_LOCKS = ON' ELSE 'ALLOW_ROW_LOCKS = OFF' END) + ', ' + (CASE WHEN
B.[allow_page_locks] = 1 THEN 'ALLOW_PAGE_LOCKS = ON' ELSE 'ALLOW_PAGE_LOCKS = OFF'
END) + ') ON [' + G.[name] + ']; ' ELSE '' END),
SELECT
@CmdAlterTable += 'ALTER TABLE [' + [schema_name] + '].[' + table_name + ']
ALTER COLUMN [' + [name] + '] ' + UPPER([type_name]) + (CASE WHEN
UPPER([type_name]) <> 'SYSNAME' THEN '(' + (CASE WHEN A.max_length > 0 THEN
CAST(A.max_length AS VARCHAR(10)) ELSE 'MAX' END) + ')' ELSE '' END) + ' COLLATE '
+ [database_default_collation] + ' ' + (CASE WHEN A.is_sparse = 1 THEN 'SPARSE '
ELSE '' END) + (CASE WHEN A.is_nullable = 1 THEN 'NULL' ELSE 'NOT NULL' END) + ';'
FROM
#Colunas A
-------------------------------------------------------------------------
-- Executa os scripts
-------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------
--verificar as colunas que temos no formato texto para alterarmos o collation uma
a uma:
SELECT
C.NAME AS 'COLUNA',
T.NAME AS 'TABELA',
C.COLLATION_NAME
FROM SYS.columns AS C
INNER JOIN SYS.tables AS T ON C.object_id = T.object_id
WHERE collation_name IS NOT NULL
AND T.TYPE = 'U'
ORDER BY 2;
GO