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 :

[sqlexp2005] MAJ de tables, question facile


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut [sqlexp2005] MAJ de tables, question facile
    Bonjour,
    J'ai une question qui va certainement vous sembler assez facile.

    Je suis sur SQL express 2005
    Voila je dois modifier une base de données, pour l'optimiser en ajoutant certaines tables, certains attributs, etc.
    Certaines de ces nouvelles tables seront complétée selon les données qui sont actuellement dans la base
    Par exemple :

    J'ai une table piece avec un champ "MarquePiece" qui est une chaine de caractère avec le nom de la marque de la pièce. Cependant je veut créer une table marque, avec un IdMarque et NomMarque, et remplacer l'attribut piece.MarquePiece par piece.IdMarquePiece

    Donc je crée ma table marque piece, mais pour la remplir, il me faudrait utiliser une requete procédurale, du genre (juste l'esprit, les instructions n'existent peut etre pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    maRequete = execute(select distinct(piece.MarquePiece) from piece)
    While (row = maRequete.nextRow)
      insert into marque values (x, row('MarquePiece')
    endwhile
    Ou est ce que je fais ce genre de requete ? Dans l'éditeur de requete ? Je ne sais pas comment réutiliser le résultat de ma requete et je ne sais pas si je peux faire des while etc.
    Est ce dans des cas comme cela qu'on utilise le Transact-SQL ? Je ne suis pas convaincu car ce n'est pas une procédure stockée a faire ou quoi, c'est simplement pour executer une fois.

    Merci de m'indiquer ou est ce que je fais ca



    Minuscule question au passage, tant qu'a faire : pas possible de créer un script complet d'une table avec les creates ET insert ? Je ne trouve nulle part l'option pour créer le script d'insertion des tuples en SQL, y a bien clic droit sur la table > générer script > INSERT To, mais celui ci créer un début de requete d'insertion sans mettre les données de la table.

    Merci à tous

  2. #2
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Facile, comme tu dis !

    Ben en gros, dans l'analyseur de requête, tu vas faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO marque
    SELECT DISTINCT MarquePiece FROM Piece

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Erf en effet vu comme ca c'est très facile !

    Mais quid si je veux ajouter un IdMarque aussi, qui s'auto (ou pas) incrémente ?

    Enfin et puis de manière générale, si je veux faire des requêtes de MAJ de manière procédurale, y a-t-il un moyen ? Car cette mise à jour de table reste un exemple de l'ensemble des mises à jour que je dois faire, je pense que parfois j'aurai besoin de toucher un peu à des ifs, while etc.
    (ou alors j'attends d'avoir un exemple précis ou j'en sens le besoin pour poster ?)

    Merci bien déja en tout cas !

  4. #4
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Alors alors....

    Pour un compteur, il faut utiliser la fonction IDENTITY

    Par exemple, si dans ta table [marque] tu as un identifiant et un libellé, il va falloir que tu la crée de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE marque
    (id      integer IDENTITY(1, 1) NOT NULL
    ,libelle nvarchar(50)
    ,CONSTRAINT PK_marque PRIMARY KEY (id)
    )
    Du coup, tu vas pouvoir faire ton insert de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO marque (libelle)
    SELECT DISTINCT MarquePiece FROM piece
    Ensuite, pour ce qui est de tes if, en SQL ça correspondrait à un WHERE. C'est à dire que dans ta requête d'insertion, derrière le SELECT ... FROM ..., tu vas pouvoir ajouter une clause WHERE. Par exemple, pour insérer les marques des pièces fabriqués en France :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO marque (libelle)
    SELECT DISTINCT MarquePiece FROM piece
    WHERE PaysPiece = 'France'
    En fait, tu peux tester ce que renvoie ton SELECT avant d'effectuer l'insertion... Exécute juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT MarquePiece FROM piece
    WHERE PaysPiece = 'France'
    Mais vu que tu as l'air vraiment débutant sur SQL SERVER, je te conseille de jeter un oeil sur http://sqlserver.developpez.com/cours/, tu y trouveras plein de trucs !

    Et si tu éprouves toujours le besoin de faire des boucles et des tests de manière procédurale, tu n'auras qu'à jeter un oeil aux 'procédures stockées' et aux 'curseurs'...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    Merci je vais essayer de d'avantage me renseigner.

    Concernant le where etc, de ce coté je n'ai pas de probleme au niveau SQL pur je me débrouille pas mal j'ai été formé (j'avoue je n'ai pas pensé au insert select) et je n'ai pas réellement besoin d'eclaircissement dessus (mais c'est louable de ta part).
    Mais c'est vrai que je suis débutant concernant SQL SERVER, j'ai déja travaillé sur MySql ou d'autres SGBD avec plutot des cas d'écoles etc, mais sur sql server je ne sais pas exactement les possibilités offertes, par exemple il me semble qu'il n'y a pas de fonction d'auto increment d'ou l'intéret de ta méthode IDENTITY (je vais me renseigner pour voir ce qu'elle fait exactement, merci).
    Pour les requêtes procédurales, merci de m'orienter vers les procédures stockées ou pointeurs quand j'en aurai besoin, c'est surtout ce que je voulais savoir, mais je me rends compte que la plupart des mises à jour pourront être effectuées comme tu le dis par plusieurs requêtes simples.
    En fait pour moi les procédures stockées correspondent plus à des procédures qu'on utilisera régulièrement pour intéroger la DB et renvoyer des données, tandis que la c'est pour une utilisation unique c'est pourquoi je voulais faire un simple fichier de script.

    Merci je tiens au courant si un probleme

  6. #6
    Nouveau membre du Club
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Mais je t'en prie, j'aime bien pouvoir donner des coups de main à mon tour !!

    Au fait, oublie pas de cliquer sur !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MAJ de table par formulaire
    Par ISLEA95 dans le forum Access
    Réponses: 1
    Dernier message: 21/11/2005, 10h36
  2. 2 Questions facile sur scrollbar et Accents
    Par mamizo dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/02/2005, 11h53
  3. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54
  4. Question facile, erreur bizzare lors d'un Left, Top
    Par SpiderAlpha dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2004, 12h56
  5. Question facile!!!!
    Par AL-{3D}- dans le forum DirectX
    Réponses: 2
    Dernier message: 13/10/2003, 23h37

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