2010-07-02 13 views
3

Nous avons une situation dans laquelle le regroupement des bases de données, des tables et de certaines colonnes est différent entre nos serveurs SQL de développement et de production. Les choses fonctionneront sur le dev puis se casseront à cause des conflits de collation quand elles seront promues, les données et les structures seront copiées de prod à dev qui à son tour casse les requêtes sur dev à cause des conflits, etc. Nous allons contourner ce problème en définissant explicitement le COLLATION option dans la requête parfois ou en définissant le classement de chaque colonne dans une table fautive pour contourner ce problème. Le premier semble avoir un coup de performance, et le dernier est un PITA. Y a-t-il un script ou quoi que ce soit qui puisse montrer des discordances de collation ou des informations sur une base de données et des objets, ou des suggestions pour réconcilier automatiquement les différences afin de synchroniser les choses? De plus, toutes les astuces sur le débogage des conflits de collation dans une requête seraient bien aussi ... Je ne sais jamais où le conflit est réellement et finit par devoir passer par ligne et le contourner .... soupir ....c'est le bordel.SQL Server - existe-t-il un moyen de résoudre en masse les conflits de classement

Merci pour vos idées!

+0

I programme pour une système configurable, et n'ont pas le pouvoir de modifier le schéma de la base de données. Je voudrais un morceau de code que je peux utiliser dans un script SQL pour remplacer le classement pour tout le script, afin qu'il n'y ait jamais de conflits. – Stewart

Répondre

4

En général, utilisez "COLLATE DATABASE_DEFAULT" sur la table temporaire, les variables de table etc

conflits Collation se produisent habituellement que vous avez un serveur vs conflits de classement de base de données, serveur dans ce cas étant tempdb. Franchement, je ferais un effort pour aligner vos classements et les avoir tous par base de données.

Si vous avez mixé des serveurs, des bases de données et des colonnes, il n'y a pas de solution miracle. Vous pouvez commencer par rechercher toutes les clauses COLLATE dans le code (voir ci-dessus), puis vérifier que toutes les colonnes ont été supprimées.

+0

Merci, je ne suis pas l'administrateur de ces serveurs et pour une raison quelconque les DBA n'ont pas synchronisé les classements entre les tables sur les serveurs dev et prod pour être les mêmes: -/J'utiliserai COLLATE DATBASE_DEFAULT pour contourner dans la plupart des cas, mais ce serait bien de ne pas avoir à le faire, de faire en sorte que les schémas soient les mêmes. –

0

Votre première étape est probablement de décider de la norme à utiliser pour le classement. Si vous devez gérer plusieurs classements en fonction des exigences internationales de votre demande, choisissez ceux que vous allez soutenir et comment vous envisagez de tester tous les classements.

La première étape ici consiste à décider de ce que vous allez faire, pas de la solution technique. Une fois que vous avez fait cela, vous allez devoir mordre la balle et passer en revue toutes vos tables, procédures stockées, etc. et les synchroniser sur TOUS vos serveurs et dans n'importe quel code source que vous avez. dans votre système de contrôle de la source. Idéalement, vos requêtes fonctionneront sans se référer à une collation ou faire des conversions pour faire fonctionner les choses.

Pour vous aider à trouver tous vos problèmes de classement, vous pouvez commencer à regarder cela dans toutes vos bases de données:

SELECT * FROM INFORMATION_SCHEMA.COLUMNS