2011-09-10 44 views
13

Cuando trató de cambiar la intercalación de mi base de datos existente (incluidos los datos) desde ARABIC_CS_AS a PERSIAN_100_CS_AS se produce el siguiente error:problema con el cambio de intercalación de base de datos (SQL Server 2008)

Alter failed for Database 'XXXX'. (Microsoft.SqlServer.Smo)

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

The object 'ItemTables' is dependent on database collation. The database collation cannot be changed if a schema-bound object depends on it. Remove the dependencies on the database collation and then retry the operation.
The object 'CK_FilteredReportColumnFilters' is dependent on database collation. The database collation cannot be changed if a schema-bound object depends on it. Remove the dependencies on the database collation and then retry the operation.
The object 'CK_FilteredReportColumnFilters_1' is dependent on database collation. The database collation cannot be changed if a schema-bound object depends on it. Remove the dependencies on the database collation and then retry the operation.
The object 'CK_FilteredReportColumnFilters_2' is dependent on database collation. The database collation cannot be changed if a schema-bound object depends on it. Remove the dependencies on the database collation and then retry the operation.
The object 'CK_Reports' is dependent on database collation. The database collation cannot be changed if a schema-bound object depends on it. Remove the dependencies on the database collation and then retry the operation.

ALTER DATABASE failed. The default collation of database 'XXXX' cannot be set to Persian_100_CS_AS. (Microsoft SQL Server, Error: 5075)

tratando de corregir los errores mencionados al eliminar esos objetos de la base de datos, se produce otro error con otros títulos en el proceso de conversión.

¿Alguna idea? ¿Hay alguna solución bien definida para resolver este problema?

+0

posible duplicado de [Cambiar intercalación en la columna de índice agrupado en SQL 2005] (http://stackoverflow.com/questions/581517/change-collation-on-clustered-index-column-in-sql-2005) – gbn

Respuesta

14

Ahh, este es uno de los peores problemas en SQL Server: no se puede cambiar la intercalación una vez que se crea un objeto (esto es cierto tanto para tablas como para bases de datos ...).

Solo puede guardar sus datos (no use bcp o utilidades de copia de seguridad, debe colocarlos en un csv de tipos de archivos similares ...), suelte la base de datos, vuelva a crear con la intercalación correcta y vuelva a importar los datos en la nueva base de datos ...

Espero que esto ayude.

+0

En realidad puede cambiar la intercalación de una columna sin dejar caer una tabla. Excepto columnas de las que se depende, p. por columnas calculadas, restricciones o índices. –

2

Tengo el mismo problema y todos los objetos eran funciones Primera toma copia de seguridad completa

función de secuencia de comandos como crear. eliminar estas funciones a continuación, ejecutar

use master 
go 
ALTER DATABASE xxx SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
go 
ALTER DATABASE xxx COLLATE yyyy 
go 
ALTER DATABASE xxx SET MULTI_USER 
go 

funciones Recrear

espero útil esta información.

+0

¿Qué pasa con este consejo? – fedd

+0

La intercalación de la base de datos no se puede cambiar si un objeto enlazado al esquema depende de ella. Verifique las restricciones y los procedimientos almacenados (si no me equivoco), no permitirá el cambio de colación. – Kad

0

Basta con crear una nueva base de datos con ex base de datos_b.cambiar la intercalación de acuerdo con sus necesidades y exportar de una nueva fuente a la meta.

o

herramienta intercalación uso alt que anulará todos los errores.

--Appu

+0

¿Qué es la herramienta de intercalación alternativa? – AutomationNation

-1

Sólo tipo n antes de escribir su cadena.

por ejemplo:

insert into table values (N'yourstring') 

N = Unicode.

Cuestiones relacionadas