IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

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


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Unifier la collation des colonnes d'une bdd MS SQL Server par script
    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

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Vous pouvez faire les modifications des colonnes dans la mauvaise collation avec un ALTER TABEL (cf msdn : http://msdn.microsoft.com/en-us/libr...v=sql.90).aspx)

    J'attire particulièrement sur la problématique de la collation de la tempdb qui devrait être la même que celle de votre base (et de vos colonnes dans l'idéal). Lisez le paragraphe "Collations and tempdb" de l'article de la MSDN.

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci mais j'avais déjà lu tout ca mais ca ne répond pas à mes besoins pour plusieurs raisons:
    - j'ai plusieurs centaines de colonnes/tables à migrer vers la nouvelle collation, je ne peux donc pas les migrer une par une
    - il me faut drop puis recréer toutes les clés pour être en mesure de jouer un script de migration des tables

    Voir l'article que j'ai cité dans mon message d'origine pour plus d'informations.

  4. #4
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Excusez-moi, je n'avais pas compris où était votre difficulté.

    Une simple requête sur la vue système information_schema.columns (http://msdn.microsoft.com/en-us/library/ms188348.aspx) vous donnera toutes les colonnes de type chaîne de caractère qui ne sont pas dans la bonne collation.

    Vous n'avez plus qu'à faire une requête SQL à partir de cette vue pour générer vos ALTER TABLE.

    Effectivement, les contraintes d'intégrités risquent de poser problème.
    Il vous suffit donc de générer un script qui fait un NO CHECK de toutes les contraintes et un autre qui les réactive avec un CHECK (http://msdn.microsoft.com/fr-fr/library/ms190273.aspx)

    Vous trouverez la liste des contraintes d'intégrité référentielle dans la vue système information_schema.constraint_column_usage.(http://msdn.microsoft.com/fr-fr/library/ms174431.aspx)

    Vous pouvez même filtrer pour ne désactiver les contraintes que sur les colonnes à migrer.

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci, 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/how-...new-collation/

    J'ai vérifié et il semble bien qu'on rentre dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'ELSE ' +
                            '''DROP INDEX '' + QUOTENAME(i.name) + @crlf + ' +
                            '''ON '' + ' +
                                'QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + ''.'' + ' +
                                'QUOTENAME(OBJECT_NAME(object_id)) + '';'' + ' +
                                    '@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

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juin 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    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...

Discussions similaires

  1. Probleme de connexion avec une bdd ms sql server 2005 dans un reseau local
    Par mead_Developper dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/03/2011, 21h27
  2. Réponses: 0
    Dernier message: 25/03/2010, 19h10
  3. Réponses: 3
    Dernier message: 15/10/2008, 09h24
  4. Probleme de creation d'une BDD avec SQL server 2005 et vista
    Par necer_cheniki dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 22/06/2008, 10h15
  5. Réponses: 2
    Dernier message: 13/11/2006, 07h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo