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 :

[SQL2K][T-SQL]Syntaxe des procédures stockées ?


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [SQL2K][T-SQL]Syntaxe des procédures stockées ?
    Bonjour @ tous

    Voila, je suis en train de coder une procédure stockée sur MS SQL 2000

    J'ai un soucis avec des IF imbriqués, j'ai toujours un "Else" ou un "End" en trop quelque part mais je ne comprend pas bien mon erreur. Quelqu'un pourrait-il éclairer ma lanterne s'il vous plait ?

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    SET ANSI_NULLS ON 
    GO
     
    CREATE PROCEDURE RESTITUER_FILM
     
    @idstock INT
     
    AS
     
    DECLARE @msgerreur VARCHAR(128)
     
     
    /* on recherche l'exemplaire dans la table de stock */
     
    BEGIN
    if exists (select * from dbo.stock where idStock = @idstock)
     
     
    /* On vérifie que l'exemplaire rendu est présent dans la table location */
     
    	BEGIN
    	if not exists ( select retour from dbo.location where LidStock = @idstock and retour != getdate())
     
     
    		/* On met à jour la date de retour */
     
    		BEGIN
    		UPDATE location SET retour = getDate() WHERE LidStock = @idstock
    		Print 'Date de retour de l exemplaire mis à jour'
    		End
     
     
    		/* On vérifie si il y a des relances associées à cet exemplaire */
     
    		BEGIN
    		If exists (select *  from relance, location where RidLoc = idLoc and LidStock = @idstock)
     
     
    			/* On supprime les relances */
     
    			Begin
    			delete from dbo.relance where RidLoc = ( select idLoc from dbo.location where LidStock = @idStock)	
    			End
     
    		Else
     
    			Print 'Cet exemplaire ne fait pas l objet de relance'
    			End
     
    	Else
     
    		Print 'Cet exemplaire n est pas présent dans la liste des Locations !'
    		End
     
    Else
     
    	Print 'Cet exemplaire n existe pas dans la liste des Stocks !'
    	End
    C'est sans doute une erreur toute bête, je le sent mais comme sa fait quelques heures que j'ai le nez dessus. Le conseil d'un oeil "neuf" m'aiderai beaucoup

    Merci

  2. #2
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    As- tu un message d'erreur???

    Le seul problème que je vois et que tu aurais pu trouevr en cherchant avant de poser la question est la structure d'une procédure stockée!!!


    Il n'y a qu'un BEGIN et END correspondant !!!! en début et fin de procédure.


    Exemples

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse et (ooops)

    Bref, j'ai bien une erreur de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Serveur : Msg 156, Niveau  15, État 1, Procédure RESTITUER_FILM, Ligne 47
    Syntaxe incorrecte vers le mot clé 'Else'.
    Je ne comprend pas trop l'hsitoire de Begin ... End car le code fonctionne correctement si j'enlève le 3e "If".

    En fait, plus qu'une simple erreur de syntaxe, c'est de comprendre la logique de la structuration.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Essaye ceci:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    CREATE PROCEDURE RESTITUER_FILM
     
    @idstock INT
     
    AS
    BEGIN
    	DECLARE @msgerreur VARCHAR(128)
     
     
    	/* on recherche l'exemplaire dans la table de stock */
    	IF EXISTS (SELECT * FROM dbo.stock WHERE idStock = @idstock)
    	BEGIN
     
    		/* On vérifie que l'exemplaire rendu est présent dans la table location */
    		IF NOT EXISTS ( SELECT retour FROM dbo.location WHERE LidStock = @idstock AND retour != getdate())
    	 	BEGIN
     
    			/* On met à jour la date de retour */
    			UPDATE location SET retour = getDate() WHERE LidStock = @idstock
    			Print 'Date de retour de l exemplaire mis à jour'
     
    			/* On vérifie si il y a des relances associées à cet exemplaire */
    			IF EXISTS (SELECT *  FROM relance, location WHERE RidLoc = idLoc AND LidStock = @idstock)
     
    			/* On supprime les relances */
    			BEGIN
    				DELETE FROM dbo.relance WHERE RidLoc = ( SELECT idLoc FROM dbo.location WHERE LidStock = @idStock)	
    			END
     
    			ELSE
    			BEGIN
    				Print 'Cet exemplaire ne fait pas l objet de relance'
    			END
     
    		END
    		ELSE
    	 	BEGIN
    			Print 'Cet exemplaire n est pas présent dans la liste des Locations !'
    		END
    	END 
    	ELSE
    	BEGIN 
    		Print 'Cet exemplaire n existe pas dans la liste des Stocks !'
    	END
     
    END

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci vincenteraptor !

    ça fonctionne impéccable, Je vais disséquer le code afin de comprendre l'erreur.

    désolé de vous avoir dérangé pour si-peu !




    //EDIT : Je viens de comprendre ! Merci bien

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

Discussions similaires

  1. Performance de des procédures stockée SQL Serveur
    Par tawrirte dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/10/2011, 06h46
  2. [MySQL] Charger un fichier SQL contenant des procédures stockées
    Par Shiva dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/03/2010, 03h23
  3. Réponses: 3
    Dernier message: 05/08/2009, 17h03
  4. Réponses: 2
    Dernier message: 28/03/2009, 16h15
  5. Réponses: 3
    Dernier message: 16/06/2006, 16h36

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