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 :

Boucle IF avec between


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut Boucle IF avec between
    Voila j'ai un procbleme avec une partie de mon code que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    IF EXISTS (SELECT dateChange FROM CHANGE BETWEEN @date1 AND @date2)
    			BEGIN
    				SET @dateChange = (SELECT dateChange FROM CHANGE BETWEEN @date1 AND @date2)
    				SET @typeChange = (SELECT typeChange FROM CHANGE WHERE dateChange=@dateChange)
    				IF @typeChange = 1 /*ete -> hiver*/
    					SET @tpspresence = datediff(minute,@date1,@date2)+60
    				ELSE 
    					SET @tpspresence = datediff(minute,@date1,@date2)-60
    				END
    			END
    			ELSE 
    				SET @tpspresence = datediff(minute,@date1,@date2)
    			END
    Qui m'affiche des erreurs tels que :
    Msg*156, Niveau*15, État*1, Procédure*creaTpsMois, Ligne*73
    Syntaxe incorrecte vers le mot clé 'BETWEEN'.
    Msg*156, Niveau*15, État*1, Procédure*creaTpsMois, Ligne*75
    Syntaxe incorrecte vers le mot clé 'BETWEEN'.
    Msg*156, Niveau*15, État*1, Procédure*creaTpsMois, Ligne*133
    Syntaxe incorrecte vers le mot clé 'END'.
    Mon but est de détecter si une date est comprise entre 2 autres si oui on effectue un traitement particulier.

    Je ne vois pas l'erreur, surement très simple, mais je ne vois pas . Qu'en pensez vous ?

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut
    Quelle stupidité , la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    			/*On doit verifier que entre les 2 dates il n'y a pas eu de changement été/hiver */
    			IF EXISTS (SELECT dateChange FROM CHANGE WHERE dateChange BETWEEN @date1 AND @date2)
    			BEGIN
    				SET @dateChange = (SELECT dateChange FROM CHANGE WHERE dateChange BETWEEN @date1 AND @date2)
    				SET @typeChange = (SELECT typeChange FROM CHANGE WHERE dateChange=@dateChange)
    				IF @typeChange = 1 /*ete -> hiver*/
    					SET @tpspresence = datediff(minute,@date1,@date2)+60
    				ELSE 
    					SET @tpspresence = datediff(minute,@date1,@date2)-60
     
    			END
    			ELSE 
    				SET @tpspresence = datediff(minute,@date1,@date2)
    Je laisse le poste.

    Merci

  3. #3
    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 : 44
    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,

    Votre requête est assez bizarre, puisque vous affectez à @dateChange une valeur de la colonne dateChange si la dateChange est comprise entre deux autres dates, ce qui peut potentiellement vous retourner plusieurs valeurs.
    Dans ce cas, vous ne savez pas laquelle est affectée à la variable.

    On peut simplifier en écrivant :

    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
    SELECT	@dateChange = dateChange
    FROM	dbo.CHANGE
    WHERE	dateChange BETWEEN @date1 AND @date2
     
    IF @dateChange IS NOT NULL
    BEGIN
    	SELECT @tpspresence = CASE typeChange
    					WHEN 1 THEN DATEDIFF(minute, @date1, @date2) + 60
    					ELSE DATEDIFF(minute, @date1, @date2) - 60
    				END
    	FROM	dbo.CHANGE
    	WHERE	dateChange = @dateChange
    END
    ELSE
    BEGIN
    	SELECT @tpspresence = DATEDIFF(minute, @date1, @date2)
    END
    Mais il demeure un contre-sens dans la première requête ...

    @++

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Par défaut
    Bonne remarque, merci !

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

Discussions similaires

  1. [MySQL] Probleme de boucle if avec commande sql
    Par lila13 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/05/2006, 10h17
  2. [VB6] boucle for avec liste de valeur defini
    Par Morpheus2144 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/04/2006, 18h12
  3. Problème avec Between dans un code
    Par Sendo dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 18h44
  4. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

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