|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 82 ![]() |
Bonjour à tous,
Je conçoit une nouvelle base de données, jusqu'ici tout va bien... Sauf qu'en voulant modifier le type de donnée d'une colonne j'ai l'erreur suivante : Citation:
J'ai donc déporté ces colonnes sur une autre table et j'ai toujours le même problème. Voici le script de création : Code :
D'avance merci pour vos réponses. Bonne journée, Pierre-Yves |
|||
|
|
00
|
|
|
#2 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Citation:
que stockez vous dans ces colonnes ? vous pouvez passer en varchar(1000) ou nvarchar(1000). |
|
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
De plus, utiliser du NVARCHAR pour des données latines c'est doubler le volume de la base pour rien !
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 82 ![]() |
Bonjour et merci pour vos réponses.
Même en supprimant les colonnes nchar(1000) j'ai le même problème ? Dois-je supprimer et recréer la table ? SQlpro>Merci pour la remarque |
|
|
00
|
|
|
#5 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Bonjour,
Citation:
Et le script est incomplet puisque les colonnes qui participent à la clé primaire ne sont pas spécifiées. Citation:
Et pourquoi nchar(1000) ? - en n[var]char, vous utilisez Unicode, donc deux octets par caractère, contrairement à [var]char qui lui utilise ASCII et donc un seul octet par caractère - en utilisant du [n]char(1000), quelle que soit la longueur réelle des valeurs de chaîne de caractère que vous stockez dans une colonne de ce type, celles-ci occuperont de toute façon [2000] 1000 octets. Est-ce bien nécessaire ? Passez en n[var]char ! N'utilisez Unicode que si vous allez stocker des chaînes dont les caractères peuvent être non-latins (provenant des langues asiatiques, de l'arabe, et bien d'autres, ...) @++
__________________
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 |
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 82 ![]() |
Merci pour la remarque sur la différence de stockage nvarchar et varchar.
Mais malgré l'absence de ces colonnes "gargantuesques" l'erreur est toujours là... |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Postez le DDL de la table et le script de modification que vous tentez d'executer
|
|
|
10
|
|
|
#8 | |||
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 82 ![]() |
Bonsoir,
Je n'ai pas eu le temps de répondre avant mais voici les infos. Script de création de la table : Code :
Code :
ALTER TABLE tbl_clients ALTER COLUMN id_referent int Citation:
Bonne soirée, Kri |
|||
|
|
00
|
|
|
#9 | |||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Enfin quelque chose de précis !
Vous remarquerez que si vous aviez respecté la charte de postage du forum, nous aurions tous été plus vite Maintenant si je prends ce qui nous intéresse dans votre script, j'ai un peu de mal à y croire : - la colonne id_personne est de type int, donc toute valeur y occupe 4 octets - la colonne client_date_creation est de type date, donc toute valeur y occupe 3 octets - la colonne client_nom_jeune_fille est de type nvarchar(50), donc dans le pire des cas toute valeur y occupe au maximum 100 octets - client_num_ss est de type nchar(14), donc toute valeur occupe 28 octets - id_medecin est de type int, donc toute valeur y occupe 4 octets - id_referent est de type smallint, donc toute valeur y occupe 2 octets - date_ordonnance est de type date, donc toute valeur y occupe 3 octets - id_mode_rappel est de type tinyint, donc toute valeur y occupe 1 octet Si nous faisons maintenant la somme des tailles des colonnes, nous sommes au maximum à 145 octets ... Si j'exécute le lot suivant : Code :
Citation:
Pour la colonne client_nom_jeune_fille, prévoyez-vous de stocker des caractères non-latins (provenant des alphabets asiatiques, arabe, hébreux, russe, sanscrit, ...) ? Si non, passez en varchar. Pour la colonne client_num_ss, s'agit-il du numéro de sécurité sociale ? Si tel est le cas, et si j'en crois ce que j'ai lu sur Wikipédia : - il peut comprendre 15 caractères - dans la mesure où ce sont uniquement des chiffres et que le premier chiffre ne peut pas être un zéro, pourquoi ne les avez-vous pas stocké dans une colonne de type entier ? Avec un bigint vous seriez à 8 octets, sans compter la vitesse de recherche d'un bigint comparée à une chaîne de caractères. Comme il est en plus probable que vous indexiez cette colonne, l'index sera plus petit, donc son parcours sera plus rapide @++
__________________
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 |
|
Nouveau Membre du Club
![]() Inscription : avril 2005 Messages : 82 ![]() |
Bonjour et merci pour votre réponse (promis je relis la charte
Finalement j'ai résolu le problème en supprimant et re-créant la table. J'ai l'impression que SQL-server avait "gardé en mémoire" les colonnes nvarchar créées précédemment En tout les cas merci à tous pour vos conseils sur l'utilisation des types de données, je suis autodidacte et je suis friand d'avis sur mon travail. Bonne journée à tous |
|
|
00
|
|
|
#11 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Citation:
SQL Server ne versionne pas les tables Vous vous être peut-être fié aux colonnes que vous voyez dans l'explorateur d'objets, mais elle ne sont pas maintenues en tant réel (ce qui est normal, sinon imaginez le coût que cela pourrait avoir !) @++
__________________
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
|
Copyright © 2000-2012 - www.developpez.com