|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Bonjour à tous !
Je viens vers vous car je suis un peu perdu... Commençons par planter le décor. Il y a une première DB donc la collation est French_CI_AS et une deuxième DB dont la collation est Latin1_General_CI_AS. Lorsque je veux faire une requête qui lie ces deux DB, j'obtiens une erreur avec le message suivant : Citation:
J'ai donc modifié la collation de la table en French pour la mettre en Latin mais il semble que les colonnes des tables restent en French malgré tout et donc mon erreur persiste. Ma question est donc double : - Existe un moyen de convertir vers la bonne collation dans la requête ? - Est-il possible de créer une requête qui va aller changer la collation de toutes les colonnes de toutes les tables de la DB en French pour y mettre Latin1 ? (je n'ai jamais préciser de collation lorsque j'ai écrit un ordre create table... du coup, je suis perplexe). Merci d'avance pour l'aide précieuse que vous pourrez m'apporter. Griftou. |
|
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
A première vue, le choix des collations parait annondin, c'est par la suite que les choses se corse. néanmoins, dans une requete, vous pouvez spécifier la collation à utiliser par exemple dans le cas d'une simple vérification d'égalité, vous pouvez faire : Code SQL :
|
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
ok, ça a l'air de fonctionner. NICE !!
Par contre, j'dois avoir un problème avec les outer join... Va falloir que je retourne jeter un oeil sur les articles de sqlpro... |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Par contre pour le futur, histoire de ne pas devoir mettre collate à chaque fois (car ce french ne devrait pas être), comment puis-je changer la collation partout en une fois ?
|
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
Vous pouvez le spécifier : - à l'installation de SQL Server et ce n'est pas modifiable par la suite - à la création de chaque base de données Dans le deuxième cas : - Si vous le faites avec l'UI de SQL Server Management Studio, lorsque vous êtes dans l'assistant, vous pouvez spécifier la collation dans la page Options - Soit en requête, avec la clause COLLATE @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#6 | |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Citation:
Je suis management studio. J'ai changé la collation de la DB. Cela a bien modifié la collation des tables qu'elle contient mais pas des colonnes se trouvant dans les tables. Est-ce normal ? |
|
|
|
00
|
|
|
#7 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Pardonnez-moi pour la documentation de COLLATE, qui est ici.
La collation peut être spécifiée : - au niveau de l'instance - au niveau de la base de données - au niveau des colonnes Mais pas pour une table. A la création d'une table, si la collation n'est pas spécifiée pour les colonnes de type chaîne de caractères, alors la collation de la base de données est utilisée. De la même façon, à la création d'une base de données, si la collation n'est pas spécifiée, alors la collation de l'instance SQL Server est utilisée. Donc vous devez passer en revue toutes les colonnes de toutes les tables de votre base de données pour voir lesquelles n'utilisent pas la collation que vous souhaitez avoir, puis la changer. Notez que cela aura un impact lourd, et qu'il est donc fortement conseillé de tester cela avant de le faire en production (restaurez une sauvegarde sous un autre nom de base de données pour ce faire). Vous pouvez vous générer le code avec le script suivant : Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#8 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Woaw !!
Un tout grand merci pour ce scipt !!! Je file cela à mon collègue pour qu'il teste sur sa machine de suite. Merci !!! |
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Avec plaisir
Vérifiez bien les instruction avant d'exécuter le script généré ![]() J'ai exclu les colonnes calculées, mais il est possible que j'aie oublié d'autres choses. Comme je te l'ai dit, exécutez le script sur une base de données qui n'est pas une base de données de production, ni une base de données que vous utilisez régulièrement pour faire des tests ! @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#10 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Oui oui bien sûr. Cela va de soi !
|
|
|
00
|
|
|
#11 | |||
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Voilà, je viens de tester.
Et ça ne marche pas Voici les détails. J'ai donc c/c votre code dans une nouvelle requête et j'ai remplacé les 3 premières lignes comme suit : Code :
Citation:
Les variables sont pourtant bien déclarées dans les 2e et 3e ligne du code. Je ne comprends pas... |
|||
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() |
Vous êtes en SQL SERVER 2005...
Vous ne pouvez donner de valeur par défaut directement (seulement depuis le 2008): Code :
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Jamais je n'aurai trouvé ce genre de détails...
Je sens que je vais demander un upgrade de sql server à mon chef ^^ Ca "compile", ça tourne .Par contre, est-il possible que cela "n'aille pas jusqu'au bout" ? Je me pose cette question car la dernière ligne est : Citation:
|
|
|
|
00
|
|
|
#14 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
J'ai compris : c'est le PRINT qui est limité à 4000 caractères.
Voici le batch corrigé pour tout afficher : Code :
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#15 | |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Je vais tester cela de suite.
Sinon une question déjà. Pour affecter une valeur à une variable, quelle différence entre utilisé l'instruction SET et l'instruction SELECT comme vous le faites ici ? EDIT : ET voilà les première ligne de ce qui est visible dans l'onglet message Citation:
Je n'ai aucune idée de la faute de syntaxe qu'il pourrait y avoir :-/ Faut-il un point-virgule à la fin de chaque ordre ALTER ? |
|
|
|
00
|
|
|
#16 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
Citation:
Je viens de faire un test sur mon PC et tout se passe normalement. C'est une question qui va peut-être vous paraître stupide, mais est-ce que vous avez copié le code généré par le script que je vous donné (qui apparaît dans la console SSMS) dans une nouvelle fenêtre de requête ? @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#17 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Effectivement l'EXEC n'aime pas le GO
Supprimez-le, puis générez vous le code. Ensuite copiez tout ce code dans une nouvelle fenêtre de requête, et exécutez-le. Désolé, je n'ai pas testé ce cas-là ... ![]() @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#18 | |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Il n'est pas nécessaire de vous excuxer !! C'est déjà bien gentil de vous occuper de mon cas.
J'ai donc commenté l'instruction exec, fait touner le code pour générer le code et coller le code généré dans une nouvelle query pour l'exécuter. Cela semble avoir fonctionner correctement mis à part pour quelques colonnes que je traiterai manuellement. Pour info, voici les messages après exécution Citation:
Bien à vous, Griftou. |
|
|
|
00
|
|
|
#19 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
Le second script corrige ce problème puisque la valeur de la variable est écrasée par l'instruction SQL qui est calculée à chaque fois pour une colonne dont la collation est à changer. Il vous faut donc n'utiliser que le second script, sans l'instruction EXEC, ce qui donne : Code :
Citation:
Si vous êtes sont sous SQL Server 2005 ou 2008, je vous conseille vivement de changer le type de ces colonnes : - pour text, à varchar(max) - pour ntext, à nvarchar(max) - pour image, à varbinary(max) @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||
|
00
|
|
|
#20 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 301 ![]() |
Je changerai le type de ces colonnes.
Par contre pour les autres, comme par exemple la colonne siege de la table tbSieges qui en est la clé primaire, comment puis changer la collation ? Je pensais le faire manuellement en allant dans la table en mode design mais il n'y a pas de propriété pour faire cela. Le seul endroit où je peux voir la collation est en faisant un clic droit et en allant dans Properties puis dans Extended Properties. Là je peux voir la collation mais impossible de la changer... Faut-il que je supprime la clé primaire pour refaire tourner le script à nouveau ou y a-t-il une méthode "moins lourde" pour réaliser cela ? Griftou. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com