AVERTISSEMENT: Je sais que cette question a été posée cent fois auparavant, mais je voulais juste vérifier qu'il n'y avait pas de solution plus simple que j'aurais pu manquer avant d'aller de l'avant et d'écrire / de trouver beaucoup de code pour le faire.
Notre logiciel utilise une base de données conçue à l'origine pour SQL Server 7, et en tant que tel, tous les scripts qui le créent ne spécifient aucun classement explicite pour les colonnes de caractères. Au lieu de cela, lorsqu'une base de données est créée / restaurée vers SQL Server 2000 ou supérieur, chaque colonne hérite du classement de la base de données (qui se trouve être SQL_Latin1_General_CP1_CI_AS
comme c'était la valeur par défaut de SQL Server 7).
Théoriquement, cela n'aurait pas trop d'importance, car si notre base de données est créée à partir de zéro sur le serveur d'un client, elle hérite du classement du serveur du client (qui est normalement l'installation par défaut moderne Latin1_General_CP1_CI_AS
) et tout fonctionne. Cependant, ce scénario tombe en panne lorsqu'ils nous envoient une sauvegarde de base de données, ou nous leur envoyons une sauvegarde de base de données, et nous ou ils obtiennent l'erreur de non-concordance de classement redoutée chaque fois que le code essaie d'accéder aux tables temporaires, etc.
Nous avons essayé d'éduquer les clients à installer ou à reconstruire leurs instances SQL Server pour utiliser notre classement préféré, mais bien sûr, cela ne se produit pas toujours et ce n'est pas toujours possible.
Les solutions qui impliquent la création d'une nouvelle base de données et la copie des données ne sont pas vraiment pratiques pour nous, nous avons besoin d'une "baguette magique" que nous pouvons agiter dans une base de données en direct pour corriger toutes les colonnes en place sans perturber les données. Je pense à écrire un utilitaire pour ce faire, mais comme ce sera un gros travail, quelqu'un a-t-il des suggestions plus simples?