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 :

Syntaxe sur if else


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Par défaut Syntaxe sur if else
    Bonjour,

    Ce bout de code est issue de ma 1er procédure stockée .
    J'ai un problème de syntaxe sur la condition IF, j'ai aussi hésité a la remplacer par CASE.
    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF @date1 = NULL @date1 = 'ok'  else @date1 'pas ok'
    Le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Syntaxe incorrecte vers '@date1'

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

    Les 2 sont possibles : (je suppose que @date1 n'est pas une date ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF @date1 IS NULL 
     SET @date1 = 'ok'  
    ELSE 
     SET @date1 = 'pas ok'
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET date1 = CASE WHEN @date1 IS NULL THEN 'ok'
                              ELSE 'pas ok'
                      END
    ++

  3. #3
    Membre éclairé Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Par défaut
    (je suppose que @date1 n'est pas une date
    Si c'est une date, ça pose problème à priori ?!

  4. #4
    Expert confirmé
    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
    Par défaut
    Oui parce que vous réaffectez à la variable @date1 est une valeur qui n'est pas conforme ('ok' ou 'pas ok')

    Dans ce cas il faut ajouter une 2ème variable @result par exemple ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF @date1 IS NULL 
     SET @result = 'ok'  
    ELSE 
     SET @result = 'pas ok'
    Sinon postez votre code entier de procédure pour voir si on peut procéder autrement

    ++

  5. #5
    Membre éclairé Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Par défaut
    J'ai modifié la condition, c'est mieux avec une date plutôt qu'un varchar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF @date1 IS NULL 
         SET @date1 = '2010-01-01'  
        ELSE 
         SET @date1 = @date1
    Si c'est hors post je comprendrais, sinon pourriez-vous me dire si mon début de procédure vous parait correcte :

    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
     
    ALTER PROCEDURE [dbo].[CALCUL_TEST](@matric int)
    AS
     
    DECLARE @pb int;
    DECLARE @pm int;
    DECLARE @abs1 int;
    DECLARE @abs2 int ;
    DECLARE @date1 datetime;
    DECLARE @date2 datetime;
     
    -- Récupération des valeurs nécéssaires au calcul de la prime individuelle
    SELECT
     @date1=d_entree
    ,@date2=d_sortie
    ,@abs1=absenteisme1
    ,@abs2=absenteisme2
    ,@pm=part_manageriale
    FROM 
    utilisateur_gldr A
    WHERE 
    peg = 1
    AND A.annee = 2010
    AND MATRIC = @matric 
     
        -- On vérifit l'existance de la prime de base (@pb)
        IF NOT EXISTS(SELECT prime_Debase FROM peg_historique_calcul WHERE annee = 2010)
    BEGIN
        PRINT 'Il manque la prime de base';
        RETURN;
    END
        IF EXISTS (SELECT prime_Debase FROM peg_historique_calcul WHERE annee = 2010)
    BEGIN
        PRINT 'Le calcul peut commencer :';
     
        IF @date1 IS NULL 
         SET @date1 = '2010-01-01'  
        ELSE 
         SET @date1 = @date1
     
        PRINT @date1;
        RETURN;
     
    END

  6. #6
    Expert confirmé
    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
    Par défaut
    Moi j'enleverais la partie IF .. ELSE et je modifierais le 1er SELECT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    -- Récupération des valeurs nécéssaires au calcul de la prime individuelle
    SELECT
     @date1=ISNULL(d_entree, '2010-01-01')
    ,@date2=d_sortie
    ,@abs1=absenteisme1
    ,@abs2=absenteisme2
    ,@pm=part_manageriale
    FROM 
    utilisateur_gldr A
    WHERE 
    peg = 1
    AND A.annee = 2010
    AND MATRIC = @matric
    .....
    ++

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

Discussions similaires

  1. [MySQL] Erreur de syntaxe sur requête
    Par winnie82 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 21/03/2006, 13h51
  2. [MySQL] Erreur de syntaxe sur ma requête SELECT
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 08/03/2006, 11h50
  3. [MySQL] Erreurs de syntaxe sur requêtes DELETE
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/03/2006, 15h53
  4. Erreur de syntax sur JOIN
    Par helje dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/03/2006, 17h36
  5. Erreur de syntaxe sur la création d'une vue.
    Par cgougeon dans le forum Installation
    Réponses: 3
    Dernier message: 09/09/2005, 11h00

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