Unifier la collation des colonnes d'une bdd MS SQL Server par script

Unifier la collation des colonnes d'une bdd MS SQL Server par script - SQL/NoSQL - Programmation

Marsh Posté le 11-06-2013 à 11:01:53    

Bonjour,
 
Un de nos clients a changé la collation de sa base de FRENCH_CS_AS vers FRENCH_CI_AS puis a migré notre produit vers une nouvelle version. Il se retrouve donc avec des colonnes dans l'ancienne collation et des nouvelles colonnes dans la nouvelle collation et cela pose problème lorsqu'on compare les tables.  
 
La problématique c'est que pour que la mise à jour des colonnes vers la bonne collation implique que je:
- drop toutes les clés étrangères, primaires et uniques ainsi que les index
- exécute le script de mise à jour vers la nouvelle collation
- recrée toutes les clés et index précédemment supprimés
 
Je n'ai trouvé que deux méthodes:
- export de la bdd sous forme de script, puis réimport mais c'est très lourd et de plus cela plante au bout d'un moment, pour une raison que j'ignore
- les scripts suivant:  le premier script est corrigé dans les commentaires, les deux procédures sont créées, les script 5 utilisent les procédures créé en 4 mais ne renvoient que des lignes  du genre "-- Drop Referencing FKs" au lieu de renvoyer des alter table comme il devrait. Je pense que cela est dû au fait qu'on exécute ces actions au lieu de les print mais je suis totalement perdu avec ce script et toutes mes tentatives de modification ont été vaines jusqu'ici.
 
Seriez-vous, svp, en mesure de m'aider?
 
Merci d'avance
 
Cordialement,
 
Julien

Reply

Marsh Posté le 11-06-2013 à 11:01:53   

Reply

Marsh Posté le 11-06-2013 à 11:51:37    

Changer la collation d'une DB SQL quand on ne s'y connais pas bien est relativement difficile.
 
Comme tu le sais déjà il y a beaucoup de choses a faire, en général le plus facile est de 'simplement' recréer une DB et la structure avec la collation correcte et puis transférer les données.
 
Le transfert des données peut se faire facilement depuis le Management Studio, ça dépend de la taille des tables. Si tu as des tables très grosses il faudra peut être passer par un bcp.exe. Il y aura peut être quelques contraintes a désactiver si elle sont cyclique.
 
Pour recréer la structure avec la bonne collation, soit vous avez des scripts pour tout recréer ou alors tu peux utiliser le management studio pour scripter la structure (sans les collation) ou alors, le plus facile, tu télécharge la version d’évaluation de RedGate SQL Compare (http://www.red-gate.com/products/s [...] l-compare/) et tu utilises ça pour copier la structure.


Message édité par Oliiii le 11-06-2013 à 11:55:17
Reply

Marsh Posté le 11-06-2013 à 17:04:40    

Merci Oliiii, j'ai modifié les scripts et ils font maintenant ce que je veux, à une exception près: le premier script ne drop pas les indexs: http://code23.keole.net/2013/06/ho [...] collation/
 
J'ai vérifié et il semble bien qu'on rentre dans

Code :
  1. 'ELSE ' +
  2.                         '''DROP INDEX '' + QUOTENAME(i.name) + @crlf + ' +
  3.                         '''ON '' + ' +
  4.                             'QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + ''.'' + ' +
  5.                             'QUOTENAME(OBJECT_NAME(object_id)) + '';'' + ' +
  6.                                 '@crlf


Le problème semble donc être plutôt un problème de sortie, mais je ne sais pas comment résoudre ca...
 
Merci d'avance

Reply

Marsh Posté le 11-06-2013 à 22:09:31    

Je note aussi que les statistics ne sont pas drop par le script non plus
 
Faute de mieux j'ai drop les indexs et les statistics à la mano, en attendant une solution "propre" et pérenne, le script qui change la collation s'est bien exécuté mais cela n'a pas mis les vues à jour dans la nouvelles collation...  
 
Il faudra donc modifier le script pour qu'il gère ces deux cas...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed