Pergunta

Acabei de descobrir que, desde que criei meu banco de dados em um servidor diferente que tinha um agrupamento diferente e depois imigrou para um novo servidor com novo agrupamento, agora continuo tendo problemas e decidi mudar todos os valores do antigo agrupamento .

Então eu tentei executar esta consulta:

sp_configure "Allow Updates", 1
GO
RECONFIGURE WITH OVERRIDE
GO

UPDATE sys.columns SET collation_name = 
    'SQL_Latin1_General_CP1_CI_AS' WHERE collation_name = 'Hebrew_CI_AS'
GO

sp_configure "Allow Updates", 0
GO
RECONFIGURE
GO

Mas aqui está a saída da consulta:

Configuration option 'allow updates' changed from 0 to 1. 
    Run the RECONFIGURE statement to install.

Msg 259, Level 16, State 1, Line 2
Ad hoc updates to system catalogs are not allowed.

Configuration option 'allow updates' changed from 1 to 0. 
    Run the RECONFIGURE statement to install.

ATUALIZAR
De acordo com as respostas abaixo, estou apenas procurando uma maneira automatizada de executar a ação.

Foi útil?

Solução 3

Esta consulta é gera um script que trocará tudo Hebrew_CI_AS colunas agrupadas para Latin1_General_CI_AS Agrupamento:

DECLARE @Script varchar(MAX)
SET @Script = CAST((
SELECT 'ALTER TABLE [' + Tables.Name + '] ALTER COLUMN [' + 
  [Columns].Name + '] ' + Types.Name + '(' + 
  CAST([Columns].max_length AS varchar) + ') COLLATE Latin1_General_CI_AS ' + 
  CASE WHEN [Columns].is_nullable = 0 THEN 'NOT ' ELSE '' END + 'NULL '
FROM sys.tables Tables INNER JOIN sys.all_columns [Columns]
  ON [Tables].[object_id] = [Columns].[object_id]
  INNER JOIN sys.types Types ON [Columns].system_type_id = Types.system_type_id
WHERE [Columns].collation_name = 'Hebrew_CI_AS'
FOR XML PATH('')
) AS varchar(MAX))

PRINT @Script
EXEC(@Script)

NOTA: Para colunas indexadas/restritas, você precisará editar manualmente, mas isso também é algo desde que, ao executar a consulta acima, o resulto de erros (para uma restrição etc.) contém o nome da tabela e coluna, você deve admitir que ainda é melhor do que Faça tudo manualmente.

Outras dicas

Você precisa emitir comandos de alteração para alterar as colações das colunas específicas.

por exemplo

ALTER TABLE YourTable 
ALTER COLUMN ColA VARCHAR(10) COLLATE Latin1_General_CI_AS NOT NULL

Verificação de saída Esta referência MSDN

Você pode usar alter table Para alterar o agrupamento para cada coluna.

A única maneira de alterar um agrupamento de banco de dados é cair e recriar o banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top