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

Développement SQL Server Discussion :

Requête INSERT dans procédure stockée


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Formateur en informatique
    Inscrit en
    Octobre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 25
    Points : 20
    Points
    20
    Par défaut Requête INSERT dans procédure stockée
    Bonjour,

    j'espère être dans le bon forum car je ne suis pas tout à fait dans SQL server mais dans SQL express intégré à visual studio 2008.

    J'ai un problème de syntaxe toute simple, malgré mes recherches et notamment le cours
    http://sqlpro.developpez.com/cours/sqlaz/dml/#LII
    je n'arrive pas à trouver comment faire mon insert.


    je souhaite insérer un nombre dans la colonne "Stock" d'un enregistrement existant, de la table tab_details.
    ma requête est incluse dans une procédure stockée, comme c'est très court, je la mets aussi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CREATE PROCEDURE dbo.usp_insertStock
     
    	@MyId int,
    	@MyStock int
     
    AS
    BEGIN 
    	INSERT INTO Tab_details (Stock)
    	VALUES (@MyStock)
    	WHERE Id = @MyId
     
    END
     
     
    	RETURN
    l'erreur est "next the keyword "WHERE""

    Merci de votre aide ! Les liens vers des cours sont les bienvenus !

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    Dans le cas d'une table sans IDENTITY, et dans laquelle tu souhaites ajouter un élément @MyStock à la clef primaire ID de numéro @MyId.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BEGIN 
        INSERT INTO Tab_details (Id,Stock)
        VALUES (@MyId,@MyStock)
    END
    Pour les cours, tu as le site et le livre de sqlpro.

  3. #3
    Membre à l'essai
    Profil pro
    Formateur en informatique
    Inscrit en
    Octobre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    Bonsoir ylarvor et merci pour ta réponse,
    malheureusement l'Id en question est un IDENTITY....

    et j'obtiens donc :
    "Cannot insert explicit value for identity column in table 'tab_details' when IDENTITY_INSERT is set to OFF."


    Je peux pas faire avec un where pour indiquer sur quel enregistrement je rentre le stock, sans pour cela modifier l'Id ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    Avec un identity, tu ne dois pas te préocuper de l'emplacement.
    Il existe une méthode pour inserer à l'interieur d'un IDENTITY mais franchement, c'est une mauvaise idée ou il faut une trés bonne raison...

    Pour insérer avec un IDENTITY, tu n'indiques pas la colonne, il gère...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BEGIN 
        INSERT INTO Tab_details (Stock)
        VALUES (@MyStock)
    END

  5. #5
    Membre à l'essai
    Profil pro
    Formateur en informatique
    Inscrit en
    Octobre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    non, je m'exprime mal...

    Avec la requete que tu m'as donné, je crée tout un nouvel enregistrement (avec un nouvel ID) dont la valeur de la colonne 'stock' est celle de mon paramètre @MyStock.
    Mais ma situation est autre : j'ai déjà un enregistrement (ex : un pantalon(colonne Nom) rouge(colonne Couleur) taille 38(colonne Taille) dont l'id est 15) et je souhaite mettre dans la colonne Stock le nombre 25 --> qui est en fait mon paramètre @MySock.

    C'est pour ça que je pensais indiquer sur quel enregistrement travailler avec la clause where id = @MyId.

    L'@MyId et @MyStock sont deux valeurs qu'entrent l'utilisateur qui lance la proc_stock.

    Peut être que je dois utiliser UPDATE et non INSERT (j'avais commencé comme ça mais je me suis dit que ça n'allait pas car la valeur de Stock est NULL au moment où je lance la procédure stockée : updater une valeur nulle me semble illogique ?)

    j'ai beaucoup cherché sur google, developpez etc avec les terme "requete conditionnelle" ou "insert conditionnelle" ou "insert + where" ...mais je n'ai trouvé de concluant, mise à part que les requete conditionnelle ne sont possible qu'avec pl-sql...là je reste dubitative...je dois chercher dans la mauvaise direction ! Quel pourrait être les mots clefs pour transact sql ? Je n'ai trouvé dans les cours pourtant, ce n'est pas compliqué comme problème, ça doit pouvoir se faire (je débute alors j'ai du mal à savoir ce qui se fait et ce qui ne se fait pas)..

    Merci

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    non, tu avais tout à fait raison, il s'agissait en effet d'un UPDATE. Cela n'a pas d'importance que la valeur initiale de l'UPDATE soit Null.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE Tab_details SET Stock = @MyStock
    WHERE Id = @MyId;

  7. #7
    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,

    Dans une instruction INSERT, la clause VALUES, qui est prévue pour insérer une ligne de valeurs au plus, et pas un ensemble de lignes.

    On ne peut pas utiliser la clause WHERE qui est une clause de la commande SELECT, avec la clause VALUES de la commande INSERT.
    Lorsqu'on combine l'instruction INSERT avec une instruction SELECT, c'est que l'on souhaite un ensemble de lignes, dont le cardinal peut être 0.

    @++

  8. #8
    Membre à l'essai
    Profil pro
    Formateur en informatique
    Inscrit en
    Octobre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    merci beaucoup à tous les deux pour ces explications détaillées !
    ça fait plaisir d'avoir enfin la solution, je mettrais ça en oeuvre demain matin, en attendant Bonne nuit ! Ce soir, je me couche tôt !

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

Discussions similaires

  1. [2012] Insert dans procédure stockée
    Par fluche dans le forum Développement
    Réponses: 2
    Dernier message: 10/06/2014, 16h11
  2. [WD19] Exécuter une requête stockée dans procédure stockée
    Par clocktime dans le forum WinDev
    Réponses: 0
    Dernier message: 09/04/2014, 08h51
  3. Réponses: 1
    Dernier message: 07/02/2012, 12h30
  4. Requête SQL particulière dans procédure stockée
    Par stephane.julien dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/05/2008, 10h56
  5. [PL/SQL] INSERT dans procédure stockées
    Par etoileDesNeiges dans le forum SQL
    Réponses: 5
    Dernier message: 12/12/2006, 14h18

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