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 :

if begin end dans une requete sql


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut if begin end dans une requete sql
    Bonjour
    J'ai une requête sql qui parfois ne donne aucun resultat car pas d'objet trié dans une période donnée.
    je souhaite insérer une condition qui m'affiche un commentaire lorsque la requête ne donne aucun resultat. Mais malgré mes tentatives, je n'y arrive pas
    Voici ma requête sql.
    Pour résumé, je voudrais que lorsque le count(P.id) est <0 alors ma requete affiche "Pas objet trouvé".
    Dans le cas contraire, elle affiche les resultats.

    dans ma requete ci dessous, que le count(P.id) soit < ou > 0 , j'ai toujours le commentaire "Pas objet trouvé" qui s'affiche

    Merci de votre aide




    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
    59
    60
    61
    62
    63
    64
    65
    66
    DECLARE @EVENT_TYPE_SORTING                           Int = 2  -- Tri 
    DECLARE @EVENT_TYPE_REJECT                            Int = 34 -- Rejet
     
    DECLARE @StartDateTime DateTime = '20200131 20:30'
    DECLARE @EndDateTime DateTime =   '20200131 23:30'
    DECLARE @gate int =   '61'
     
    DECLARE @Type	Int=0
     
    DECLARE @count int
     
     
    IF 0<@count
     
    BEGIN
     
    select
    CONVERT(varchar,@StartDateTime,103) +' '+CONVERT(varchar,@StartDateTime,108) as Date_Debut,
    CONVERT(varchar,@EndDateTime,103) +' '+CONVERT(varchar,@EndDateTime,108) as Date_Fin,
    D.DescRegateCode as Destination ,
    DEB.num as Sortie,
    DEF.gate as gate,
    Count(P.id) as '@count' 
     
    from Debordement deb
    inner join OPB_Server.DefinitionOPB.dbo.[ZoneSorterExitDef] AS DEF
    on DEF.DestinationNUm=DEB.VirtualChuteNum
     
     
    LEFT JOIN [Parcel] P
    ON P.[PhysicalChuteNum]=Deb.[Num] AND P.[SystemNum]=0
     
    INNER JOIN [ParcelEvent] PE
    ON P.[Id]=PE.[ParcelId] AND 
       PE.[EventTypeNum] IN (@EVENT_TYPE_SORTING,@EVENT_TYPE_REJECT) AND 
       PE.[DateTime] BETWEEN @StartDateTime AND @EndDateTime
     
    inner join Chute C
    on C.Num=DEB.Num
     
    inner join ChutePhysicalType CPT
    on CPT.Type=C.ChutePhysicalType and CPT.Type= @type
     
    inner JOIN Vacation as V
    on V.id = P.VacationId
     
    inner join Tache as T
    ON  V.IdTache=T.Id and T.id=DEB.IdTache
     
    inner JOIN dsc as D
    on D.chute=C.num and D.Idtache=V.idtache  
     
     
    where DEF.gate=@gate
     
    GROUP BY
    D.DescRegateCode,
    DEB.num,
    DEF.gate
     
     END
    ELSE
           BEGIN
          select 'Pas objet trouvé.'
     
          END

  2. #2
    Invité
    Invité(e)
    Par défaut
    faut peut être lui donner une valeur à ton @count avant l'évaluation, non ?
    Dernière modification par Invité ; 31/01/2020 à 19h27.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour 7gyY9w1ZY6ySRgPeaefZ
    Le soucis c'est que la valeur "@count" est le résultat de la requête SQL. Par conséquent, je ne peux pas connaitre par avance le résultat

  4. #4
    Membre éclairé
    Homme Profil pro
    none
    Inscrit en
    Janvier 2020
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Janvier 2020
    Messages : 36
    Par défaut
    Hello,

    Sur le fond:

    Pour simplement tester l'existence de données, pourquoi ne pas utiliser EXISTS ?

    https://docs.microsoft.com/en-us/sql...l-server-ver15

    Sur la forme:

    Quand ceci est évalué, @count est NULL...
    Que donne la comparaison de 0 avec NULL ? Il suffit de tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF 0<NULL print 'je compare 0 avec ...'
    La syntaxe d'affectation d'une variable scalaire en utilisant un nom de colonne, dans ce cas, ça marche, mais c'est crade. Ça porte à confusion.

    Ces deux syntaxes sont préférables:

    SET @x = (SELECT ....)
    SELECT @x = A FROM ....

    Have fun

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Bonjour dbnsql
    merci pour ta réponse.
    je dois t'avouer que je n'aie jamais utiliser la fonction "EXISTS " .
    J'aurais donc besoin d'un coup de main .
    Comment dois je intégrer cette fonction EXISTS dans ma requête

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    EXISTS n'est pas une fonction. C'est un opérateur booléen qui prend en argument une requête d'extraction SELECT et renvoi Vari si des lignes sont retournées et Faux si aucune ligne n'est retournée.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. utilisation du contenu d'un champ edit dans une requete sql
    Par amri2006 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/01/2006, 16h05
  2. [MySQL] Comparer des info date dans une requete SQL
    Par kaygee dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 06/01/2006, 21h56
  3. pb de guillemet dans une requete SQL
    Par linouline dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/12/2005, 11h38
  4. [JDBC]Caractères spéciaux dans une requete SQL
    Par frizby dans le forum JDBC
    Réponses: 2
    Dernier message: 28/11/2005, 18h01
  5. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51

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