2009-05-05 12 views
0

Historique: J'ai eu un déploiement l'autre nuit qui impliquait l'exécution d'un script créant une procédure stockée. Toutefois, lors de l'exécution du script, une erreur s'est produite lors de la collation de la base de données. Le problème: Avec l'aide de notre ami Google, j'ai réussi à me rendre compte que le problème que je rencontrais était parce que le db de notre environnement en direct a une collation et la collation temporaire de la DB est différente, et je recevais un erreur lors de la tentative d'insertion dans une table de variables.Problèmes de classement Sql lors du déploiement en direct

La question: Quelle est la meilleure voie à suivre, ou mes options?

Environnement: sql 2000

Merci à l'avance.

Répondre

0

Nous avons couru dans celui-ci avec des bases de données temporaires que nous utilisons pour les tests d'intégration, en relation avec les bases de données de développement et de production. Ce que nous avons fait est de nous assurer que toutes les bases de données utilisent le même classement. Dans votre cas, vous devriez probablement être capable de faire une simple recherche/remplacement dans le fichier de script et simplement changer le classement en celui utilisé dans la base de données cible. Editer: changer dans le script vous permettra d'avancer maintenant; à plus long terme, vous voudrez vous assurer d'utiliser le même classement dans toutes les bases de données connexes.

-1

La solution évidente est de réinstaller votre base de données de développement avec le même classement que la base de données de production. Si vous ne pouvez pas, par exemple, si vous avez plusieurs bases de données de production avec des classements différents, vous pouvez vous assurer que vos mises à jour échouent ou réussissent dans leur ensemble. Placez une transaction autour de toutes les mises à jour de procédure stockées et assurez-vous d'utiliser alter, pas drop/create.

0

Il existe des solutions

  • Assurez-vous que tous vos collationner sont correspondantes dans le même db. Sinon, vous serez dans la douleur.
  • La bonne chose à faire si vos tables temporaires ne contiennent pas beaucoup de données est de les recréer avec le même assemblage que les tables dest.
  • Si ce n'est pas une option, recherchez les types de cordes, et forcer votre assemblage à la DB de destination un

    INSERT INTO dest_db..DEST_TABLE (DEST_VARCHAR_COLUMN) 
    SELECT TMP_VARCHAR_COLUMN COLLATE <dest_db_collate> 
    FROM tmp_db..#TEMP_TABLE 
    
+0

Vous avez raison, nous ne voulons pas le même douleur! Merci pour l'aide –