Question

Je viens de découvrir que depuis que je créé mon DB sur un autre serveur qui avait un classement différent, puis émigré vers un nouveau serveur avec une nouvelle collation, maintenant je continue à avoir du mal, et j'ai décidé de changer toutes les valeurs de l'ancien classement.

J'ai donc essayé d'exécuter cette requête:

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

Mais voici la sortie de la requête:

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.

UPDATE Selon les réponses ci-dessous, je suis à la recherche d'un moyen automatisé pour effectuer l'action.

Était-ce utile?

La solution 3

Cette requête est génère un script qui va troquer toutes les colonnes de collationné Hebrew_CI_AS à la collation de 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)

Remarque: Pour les colonnes qui sont indexés / freinés vous devrez modifier manuellement, mais c'est aussi quelque chose depuis lors de l'exécution de la requête au-dessus du résultat d'erreur (pour une contrainte, etc.) contient la table et nom de la colonne, vous devez l'admettre est encore mieux que tout ce do manuellement.

Autres conseils

Vous devez émettre des commandes ALTER TABLE pour modifier les classements des colonnes spécifiques.

par exemple.

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

Consultez cette référence MSDN

Vous pouvez utiliser alter table pour modifier le classement pour chaque colonne.

La seule façon de changer une collation de base de données est de supprimer et de recréer la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top