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 :

problème avec la "ELSE"


Sujet :

MS SQL Server

  1. #1
    Membre éclairé Avatar de amazircool
    Inscrit en
    Décembre 2005
    Messages
    497
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 497
    Par défaut problème avec la "ELSE"
    Je n’arrive pas exécute cette transaction une erreur de type Serveur : Msg 156, Niveau 15, État 1, Ligne 20
    Syntaxe incorrecte vers le mot clé 'ELSE'.
    Par contre la « ELSE » est juste 


    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
    DECLARE @erreur INT -- déclaration 
    SET @erreur=0 --d'une varible pour affecter le numero d erreur
     
    BEGIN TRANSACTION MaTransaction
    INSERT INTO Auditeur VALUES(35,'aa','bb','05/06/2008',25)
    SET @erreur=@erreur+@@ERROR
    INSERT INTO Auditeur VALUES(36,'aa','bb','05/06/2008',25)
    SET @erreur=@erreur+@@ERROR
    INSERT INTO Auditeur VALUES(37,'aa','bb','05/06/2008',25)
    SET @erreur=@erreur+@@ERROR
    INSERT INTO Auditeur VALUES(38,'aa','bb','05/06/2008',25)
    SET @erreur=@erreur+@@ERROR
    INSERT INTO Auditeur VALUES(39,'aa','bb','05/06/2008',25)
    SET @erreur=@erreur+@@ERROR
    if @erreur=0 -- si @erreur egal à zéro donc rien a afficher
    	COMMIT TRANSACTION MaTransaction
    	PRINT 'c est very coooool'
    	SELECT * FROM AUDITEUR
    ELSE
    	ROLLBACK TRANSACTION MaTransaction
    PRINT 'not Coooool :( '
     
    go

  2. #2
    Membre très actif Avatar de Sacha999
    Inscrit en
    Mars 2007
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mars 2007
    Messages : 294
    Par défaut
    Dans un IF.. ELSE en T-SQL, tu peux te passer de BEGIN et END pour délimité un bloc d'instruction que SI et SEULEMENT SI tu execute qu'une seule instruction dans le IF et/ou dans le ELSE.
    Exemple:
    IF @a > 0
    PRINT 'Positif'
    ELSE
    PRINT 'Negatif'

    Mais dés lors qu'il y a plusierus instructions dans le bloc, tu dois délimité le bloc par BEGIN et END
    Exemple:
    IF @a > 0
    BEGIN
    PRINT 'instruction 1'
    PRINT 'instruction 2'
    END
    ELSE
    PRINT 'Negatif'

    Donc pour ton exemple, il manque BEGIN et ELSE a la fois apres le IF et aussi apres le ELSE

  3. #3
    Membre éclairé Avatar de amazircool
    Inscrit en
    Décembre 2005
    Messages
    497
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 497
    Par défaut
    Merci, mais comment ???j’ai crée une transaction « MaTransaction » pour valider toutes les requêtes a la fois sinon (si une parmi mes requêtes n’est pas exécute) normalement la transaction doit annuler toutes les requête (c’est le principe des transactions)
    Mais si on aperçoit ce morceau de code
    La requête 4 et 5 prend la clé mais même quand je exécute, seule la requête 5 qui ne s’exécute pas, par contre la transaction doit annuler toutes les requetes.
    Pouvez vous svp me expliquer ce concept ?
    Merci
    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
     
    BEGIN TRANSACTION MaTransaction
    DECLARE @erreur int
    SET @erreur=0
    INSERT INTO auditeur VALUES (7,'hayaoui','samad','01/01/2000',18)
    SET @erreur=@erreur+ @@ERROR
    INSERT INTO auditeur VALUES (8,'redwan','samad','01/07/2000',18)
    SET @erreur=@erreur+ @@ERROR
    INSERT INTO auditeur VALUES (9,poul','samad','01/05/2000',18)
    SET @erreur=@erreur+ @@ERROR
    INSERT INTO auditeur VALUES (10,'geroger','amine','01/08/2000',18)
    SET @erreur=@erreur+ @@ERROR
    INSERT INTO auditeur VALUES (10, 'geroger','amine','01/08/2000',18)
    SET @erreur=@erreur+ @@ERROR
    IF @erreur=0
    	BEGIN
    		COMMIT TRANSACTION MaTransaction
    		SELECT * FROM AUDITEUR
    		PRINT ' belle transaction'
    	END
    ELSE
    		PRINT ' erreur veuillez essai une autre fois'

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 356
    Par défaut
    Le plus simple est de tester le code erreur à chaque fois et de faire un ROLLBACK puis sortir de la procédure via un RETURN.

    Exemple :
    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
     
    BEGIN TRANSACTION MaTransaction
     
    INSERT INTO auditeur VALUES (7,'hayaoui','samad','01/01/2000',18)
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
         RETURN -1
    END
     
    INSERT INTO auditeur VALUES (8,'redwan','samad','01/07/2000',18)
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
         RETURN -1
    END
     
    INSERT INTO auditeur VALUES (9,'poul','samad','01/05/2000',18)
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
         RETURN -1
    END
     
    INSERT INTO auditeur VALUES (10,'geroger','amine','01/08/2000',18)
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
         RETURN -1
    END
     
    INSERT INTO auditeur VALUES (10, 'geroger','amine','01/08/2000',18)
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
         RETURN -1
    END
     
    COMMIT TRANSACTION MaTransaction
    La méthode que tu utilises n'est pas fausse. Mais il ne faut oublier d'effectuer l'action de ROLLBACK sur ta transaction afin de tout annuler.

    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
     
     
    BEGIN TRANSACTION MaTransaction
    DECLARE @erreur int
    SET @erreur=0
    INSERT INTO auditeur VALUES (7,'hayaoui','samad','01/01/2000',18)
    SET @erreur=@erreur+ @@ERROR
    INSERT INTO auditeur VALUES (8,'redwan','samad','01/07/2000',18)
    SET @erreur=@erreur+ @@ERROR
    INSERT INTO auditeur VALUES (9,'poul','samad','01/05/2000',18)
    SET @erreur=@erreur+ @@ERROR
    INSERT INTO auditeur VALUES (10,'geroger','amine','01/08/2000',18)
    SET @erreur=@erreur+ @@ERROR
    INSERT INTO auditeur VALUES (10, 'geroger','amine','01/08/2000',18)
    SET @erreur=@erreur+ @@ERROR
    IF @erreur=0
    	BEGIN
    		COMMIT TRANSACTION MaTransaction
    		SELECT * FROM AUDITEUR
    		PRINT ' belle transaction'
    	END
    ELSE
           BEGIN
                    ROLLBACK TRANSACTION MaTransaction
    		PRINT ' erreur veuillez essai une autre fois'
           END

  5. #5
    Membre éclairé Avatar de amazircool
    Inscrit en
    Décembre 2005
    Messages
    497
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 497
    Par défaut
    Non toujours le même problème j’au provoquer une erreur expert (changement de auditeur par auditeur1) dans la requête 3 mais toujours les 2 requêtes précédente passe, et quand le passage de la transaction passe bien le message belle requête ne s’affiche pas.

    Et pour ton exemple il ne marche pas,
    Erreur de type
    Une instruction RETURN avec une valeur de retour ne peut être utilisée dans ce contexte.

  6. #6
    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
    Par défaut
    Bonjour,

    Si tu es sous SQL Server 2005, tu peux utiliser un block TRY CATCH pour gérer tout cela:

    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
    DECLARE @erreur VARCHAR(1024);
     
    BEGIN TRY
    	BEGIN TRANSACTION;
     
    	INSERT INTO auditeur VALUES (7,'hayaoui','samad','01/01/2000',18);
    	INSERT INTO auditeur VALUES (8,'redwan','samad','01/07/2000',18);
    	INSERT INTO auditeur VALUES (9,'poul','samad','01/05/2000',18);
    	INSERT INTO auditeur VALUES (10,'geroger','amine','01/08/2000',18);
    	INSERT INTO auditeur VALUES (10, 'geroger','amine','01/08/2000',18);
     
    	COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
    	ROLLBACK TRANSACTION;
    	SELECT @erreur = ERROR_MESSAGE();
    	PRINT @erreur;
    END CATCH;
    Si tous tes INSERT fonctionnent correctement, tu n'auras pas de message d'erreur et toute les lignes que tu viens d'insérer seront committées.
    En recanche si l'un d'entre eux provoque une erreur, la table auditeur retournera dans l'état dans lequel elle était avant le 1er INSERT, et tu auras le message d'erreur.

  7. #7
    Membre éclairé Avatar de amazircool
    Inscrit en
    Décembre 2005
    Messages
    497
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 497
    Par défaut
    nn je sais sur sql serveur 2000 :-
    J’ai troujour ke probleme suisvat
    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
    declare  @x INT
    SET set @x=0
    BEGIN TRANSACTION MaTransaction
     
    INSERT INTO auditeur VALUES (1,'hayaoui','samad',18,'mourad@gmail.fr')
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
      --   RETURN -1
    END
     
    INSERT INTO auditeur VALUES (2,'redwan','samad',18,'mourad@gmail.fr')
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
     --    RETURN -1
    END
     
    INSERT INTO auditeur VALUES (3,'poul','samad',18,'mourad@gmail.fr')
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
      --   RETURN -1
    END
     
    INSERT INTO auditeur VALUES (3,'geroger','amine',18,'mourad@gmail.fr')
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
      --   RETURN -1
    END
    INSERT INTO auditeur VALUES (4, 'geroger','amine',18,'mourad@gmail.fr')
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
      --   RETURN -1
    END
     
    IF @@ERROR <> 0
    BEGIN
         ROLLBACK TRANSACTION  MaTransaction
      --   RETURN -1
    END
     
    COMMIT TRANSACTION MaTransaction
    Je sais pas comment je peu annuler l’exécution de dernière la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO auditeur VALUES (4, 'geroger','amine',18,'mourad@gmail.fr')
    L’analyseur de requête afficher

    4
    geroger amine 18 mourad@gmail.fr

Discussions similaires

  1. Problème avec if-then-else
    Par pongping dans le forum Prolog
    Réponses: 6
    Dernier message: 27/10/2008, 23h00
  2. Problème avec mon if, else if, else
    Par beegees dans le forum ASP
    Réponses: 5
    Dernier message: 16/05/2008, 22h32
  3. problème avec If then Else
    Par thomas_wagner dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/11/2007, 01h32

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