Pregunta

Me acabo de enterar, que desde que creé mi DB en un servidor diferente que tenía una intercalación diferente, entonces emigrado a un nuevo servidor con nueva intercalación, ahora sigo teniendo problemas, y decidí cambiar todos los valores de la edad de colación.

Así que traté de ejecutar 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

Pero aquí está el resultado de la 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.

Actualizar
De acuerdo con las respuestas de abajo, sólo estoy en busca de una forma automatizada para realizar la acción.

¿Fue útil?

Solución 3

Esta consulta es genera un script que va a cambiar todas las columnas Hebrew_CI_AS cotejada a colación Latin1_General_CI_AS:

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 las columnas que están indexados / restringido tendrá que editar manualmente, sino que también es algo ya que al ejecutar la consulta anterior el error de resultado (para una restricción etc) contiene el mesa y la columna nombre, se debe admitir que es aún mejor que hacer todo manualmente.

Otros consejos

Es necesario para emitir comandos ALTER TABLE con el fin de cambiar las intercalaciones de las columnas específicas.

por ejemplo.

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

esta referencia MSDN

Se puede utilizar alter table a cambiar la intercalación para cada columna.

La única manera de cambiar una intercalación de la base de datos es dejar caer y volver a crear la base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top