IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Modification à chaud d'un type de colonne


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 74
    Points : 55
    Points
    55
    Par défaut Modification à chaud d'un type de colonne
    Bonjour à tous !

    J'administre la base sql server de ma boite et je suis confronté à un problème...
    Je m'explique, nous utilisons le type de données smallInt pour une colonne qui représente le stock de pièces...
    Après inventaire, nous mettons à jours ces données et pour un certain objet du stock nous trouvons 44000 references ... Or un smallInt est un type int codé sur 16 bit et qui plus est signé, donc les valeurs acceptées vont de -32,768 à 32,767.
    Il est donc impossible pour l'utilisateur de saisir 44000 ...

    Je pense modifier le type de la colonne de smallInt en Int mais je me demande si la manipulation n'est pas un peu dangeureuse vu que la table en question a 9000 lignes.

    Les modifition de type de colonne à chaud sont possible ?

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Les modifition de type de colonne à chaud sont possible ?
    Oui, et vous n'avez pas beaucoup de lignes.
    En revanche il ne vous faut pas le faire avec Management Studio parce que c'est plus lent, et si votre colonne est une clé primaire référencée dans d'autres tables (clé étrangère), c'est plus compliqué.

    Vous pouvez faire cette modification à chaud avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE maTable
    ALTER maColonne [NULL/NOT NULL] INT
    Si vous avez des clés étrangères référençant cette colonne, vous devrez auparavant toutes les supprimer, modifier leurs types avec la commande ci-dessus puis recréer ces contraintes de clé étrangère.

    Je vous conseille de tout scripter si c'est le cas et de tester cela sur une base de données qui est l'image de votre BD de production (BACKUP + RESTORE avec un autre nom si vous restaurez sur le même serveur).

    @++

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Oui ceci est possible. (dans le cas où vous augmentez la taille de votre champ)

    Personnellement je l'ai déjà fait sur une table contenu 1 million d'enregistrements avec la même problèmatique que vous.

    J'ai cependant pris le soin de le faire à un moment de faible activité

    ++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Merci à vous pour vos réponses !
    Je vais commencer regarder maintenant si les applications qui utilise la bdd ne vont pas me dire "merd*!;?*!!"

    Encore merci et bonne journée !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Re-Bonjour à tous !

    Je travaille actuellement sur une application développé avec access 97 ...
    Elle utilise ( en fait elle lie ) des tables provenant d'un serveur SQLServer.

    J'ai changé le type d'une des colonnes de la table représentative d'un stock d'un smallInt vers un Int ( répectivement codé sur 16bit et 32bit signé).

    Hors lorsque j'observe le type de la dite colonne lié dans l'appli access il me donne un "Entier" ce qui est normal me direz-vous... mais en fait les entiers d'access 97 sont codés sur 16bit...

    Du coup des messages d'erreurs d'ODBC m'envahissent en me disant "valeur hors limites" .

    Si j'essaye de modifier le type de la colonne en question, access me dit qu'il est impossible de le faire vu que la table est lié ...

    Comment détouner ce problème ? Auriez-vous une solution ?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    Lisez ce que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...partie2#L7.6.1
    Entourez ceci d'une transaction avec tests de retour de toutes les commandes SQL et annulation en cas de problème.

    Si vous avez des contraintes d'IR ou d'unicité et des index sur cette colonne, vous devrez préalablement les retirer avant de les remettre en fin.

    Evitez de passer par l'IHM car elle fait un code SQL qui détruit la table et la reconstruit.

    A +

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Merci de votre aide ! je tenté ceci.
    Bonne journée !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Bonjour !

    Je reviens vers vous car mon problème n'est pas résolu.
    La méthode proposé au dessus ne peux fonctionner, je m'explique :
    J'attache une table de ma base SQLServer depuis une appli Access97.
    Sous SQLServer j'ai pu sans problème modifier mon type de colonne d'un smallInt vers un Int.
    Lorsque je démarre l'appli access, celle-ci attache la table en question en utilisant la même structure que sur le SQLServer.
    Et je remarque que l'entier codé sur 32bit au niveau du serveur sql deviens un entier sous access mais codé sur 16 bit...
    Et comme c'est une table attachée alors il me refuse toutes modif de structure.

    Du coup je peux insérer des valeurs supérieur à 33000 dans la base sql server via Management Studio mais il me le refuse si je passe par l'appli sous access...

    Je pense créer une table en dur donc non attachée dans l'appli access et la remplir ensuite par les données de celle sur sqlServer ...

    Si vous avez d'autre idées je suis preneur ! En tout cas merci de votre aide !

  9. #9
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 793
    Points : 3 064
    Points
    3 064
    Par défaut
    Du coup je peux insérer des valeurs supérieur à 33000 dans la base sql server via Management Studio mais il me le refuse si je passe par l'appli sous access...
    Es-tu bien sûr de ce que tu écris ? 33.000 est très loin du maximum pour un Long integer.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Re,

    dans sqlserver int :entier signé codé sur 32bit donc valeur possible entre -2^31 (-2 147 483 648) à 2^31-1 (2 147 483 647)

    dans access int : entier signé codé sur 16bit donc valeur possible entre -2^15 (-32 768) à 2^15-1 (32 767)


    Donc ma valeur maximale dans access97 avec un entier est 32767.

  11. #11
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 793
    Points : 3 064
    Points
    3 064
    Par défaut
    Ce que tu écris tiens la route hormis que je doute qu'Access utilise un représentation "Int" là un "Long int" serait plus pertinent.

    Malheureusement je n'ai pas le temps de vérifier...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Ce que tu écris tiens la route hormis que je doute qu'Access utilise un représentation "Int" là un "Long int" serait plus pertinent.

    Malheureusement je n'ai pas le temps de vérifier...
    Effectivement cela est très bizarre, et pour en avoir le coeur net j'ai attaché la table en question sous un autre nom pensant que celle qui existait déjà n'était pas forcément mis à jour à chaque démarrage de l'appli acces ...

    Et effectivement il créer un Int sous access mais codé sous 16 bit .... Peut-être que cela est due à la version d'access qui commence vraiment à dater ...

  13. #13
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 793
    Points : 3 064
    Points
    3 064
    Par défaut
    Voilà, je viens de prendre le temps.

    J'ai créé une table Test en SQL Server

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE [dbo].[Test](
        MonChamp [int] NULL
    ) ON [PRIMARY]
    J'ai créé une nouvelle DB avec Access 2007 et j'ai attaché la table. En mode design, Access m'indique bien que c'est un champs de type Long Integer. Il est donc possible de stocker des chiffres jusqu'à plus de 2 milliards.

    Penses-tu que ce soit un problème avec ta version d'Access ?

Discussions similaires

  1. Modification de type de colonne sous Access
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/07/2007, 12h56
  2. Modifier Type de colonnes
    Par klael dans le forum Paradox
    Réponses: 6
    Dernier message: 25/05/2007, 16h50
  3. Enorme probleme avec modification de type de colonne
    Par tibere dans le forum Administration
    Réponses: 2
    Dernier message: 07/04/2007, 13h57
  4. [tranformation du type des colonnes]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 18/03/2005, 09h46
  5. [VB6] Type de colonne Access sous VB ?
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/02/2005, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo