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 :

Nombre de lignes de requête [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut Nombre de lignes de requête
    Bonjour

    Dans une procédure, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @nom = nom from clients where .....
    Je dois savoir si il y a eu un résultat en fonction du filtre pour faire un traitement spécifique ensuite .

    J'ai essayé de checker @@ROWCOUNT mais ça me renvoie 0 alors que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(*) clients where .....
    renvoie 1

    J'ai rajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SET @B = 0
    SELECT @B = 1, @Nom = nom .....
     
    if @B = 1 ...
    Quel moyen serait plus "académique" pour arriver à mes fins ?

    Papy !

  2. #2
    Membre régulier
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2014
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 97
    Points : 72
    Points
    72
    Par défaut
    BONJOUR

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT count(*) INTO VAR from  clients where .....
    IF VAR >0 then ....

  3. #3
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    C'est ce que je faisais avant mais ça m'oblige à faire 2 fois la même requête.

    Une fois sans les assignations de résultats aux variables pour compter le nombre de résultats, puis une seconde fois pour obtenir les résultats si count(*) > 0

    Le but est de faire une seule requête

  4. #4
    Expert éminent sénior
    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 : 45
    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
    Points : 12 891
    Points
    12 891
    Par défaut
    Hello,

    Vu de loin tu peux aussi faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT @nom = nom from clients where .....
     
    if @nom is not null ...
    Je suis assez étonné de voir que @@ROWCOUNT renvoie toujours 0 dans ton cas. C'est une simple instruction DML qui devrait affecter en conséquence cette variable.
    Est-ce que tu peux poster l'ensemble du code qui concerne ton problème ici?

    ++

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    La version avec le @B que j'évoquais ci-dessus


    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
    67
    68
    69
    70
    71
    72
    GO
    /****** Object:  UserDefinedFunction [dbo].[Fraisportcommandeclient]    Script Date: 07/06/2015 11:02:09 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    ALTER FUNCTION [dbo].[Fraisportcommandeclient] (@NombreArticles INT,
                                                    @Transporteur   VARCHAR(50),
                                                    @CodeClient     VARCHAR(50))
    RETURNS FLOAT
    AS
      BEGIN
          -- Declare the return variable here
          DECLARE @Result FLOAT
          DECLARE @Pays VARCHAR(50)
          DECLARE @OrigineCommande VARCHAR(6)
          DECLARE @PortFacture VARCHAR(1)
          DECLARE @Professionel VARCHAR(2)
          DECLARE @T1 FLOAT
          DECLARE @T2 FLOAT
          DECLARE @NCD INT
          DECLARE @T INT
          DECLARE @B INT
     
          SELECT @PortFacture = COALESCE([ports], 'Y'),
                 @Professionel = profess,
                 @Pays = Lower(country),
                 @OrigineCommande = prcode
          FROM   clients
          WHERE  code = @CodeClient
     
          -- Adaptation du mode de transport pour la France
          IF @pays = 'france (metropole)'
            BEGIN
                IF @NombreArticles > 2
                  SET @Transporteur = 'colissimo suivi'
                ELSE
                  SET @Transporteur = 'lettre max';
            END
     
          IF     ( @OrigineCommande LIKE '%PM%' )
              OR ( @PortFacture = 'N' )
              OR ( @PortFacture = 'Y' AND @Professionel = '1' )
            SET @Result = 0.0
          ELSE
            BEGIN
                SET @B = 0
     
                SELECT @B = 1,
                       @T1 = pt.tarif1,
                       @T2 = pt.tarif2,
                       @NCD = pt.nbcd1
                FROM   portstransp pt,
                       portspays pz
                WHERE  pt.nomtransp = @Transporteur
                       AND Charindex(CONVERT(CHAR(1), pt.idtransp), pz.transporteurs) > 0
                       AND pz.paysfr IN ( 'FRA', @Pays )
     
                IF @B = 0
                  SET @Result = 10
                ELSE
                  BEGIN
                      IF @NombreArticles <= @NCD
                        SET @Result = @T1
                      ELSE
                        SET @Result = @T2
                  END
            END
     
          RETURN @Result
      END
    La requête utilisant le @B st celle qui renvoie @@ROWCOUNT = 0
    Dans le cas précédent, je l'utilisais sans @B

  6. #6
    Expert éminent sénior
    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 : 45
    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
    Points : 12 891
    Points
    12 891
    Par défaut
    En testant ta fonction je n'ai pas trouvé de problème particulier en remplaçant @B par @@ROWCOUNT comme suit:


    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
    67
    68
    69
    70
    71
    72
    73
    74
    GO
    /****** Object:  UserDefinedFunction [dbo].[Fraisportcommandeclient]    Script Date: 07/06/2015 11:02:09 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
    ALTER FUNCTION [dbo].[Fraisportcommandeclient] (@NombreArticles INT,
                                                    @Transporteur   VARCHAR(50),
                                                    @CodeClient     VARCHAR(50))
    RETURNS FLOAT
    AS
      BEGIN
          -- Declare the return variable here
          DECLARE @Result FLOAT
          DECLARE @Pays VARCHAR(50)
          DECLARE @OrigineCommande VARCHAR(6)
          DECLARE @PortFacture VARCHAR(1)
          DECLARE @Professionel VARCHAR(2)
          DECLARE @T1 FLOAT
          DECLARE @T2 FLOAT
          DECLARE @NCD INT
          DECLARE @T INT
          DECLARE @B INT
     
          SELECT @PortFacture = COALESCE([ports], 'Y'),
                 @Professionel = profess,
                 @Pays = Lower(country),
                 @OrigineCommande = prcode
          FROM   clients
          WHERE  code = @CodeClient
     
          -- Adaptation du mode de transport pour la France
          IF @pays = 'france (metropole)'
            BEGIN
                IF @NombreArticles > 2
                  SET @Transporteur = 'colissimo suivi'
                ELSE
                  SET @Transporteur = 'lettre max';
            END
     
          IF     ( @OrigineCommande LIKE '%PM%' )
              OR ( @PortFacture = 'N' )
              OR ( @PortFacture = 'Y' AND @Professionel = '1' )
            SET @Result = 0.0
          ELSE
            BEGIN
                --SET @B = 0
     
                SELECT 
                       --@B = 1,
                       @T1 = pt.tarif1,
                       @T2 = pt.tarif2,
                       @NCD = pt.nbcd1
                FROM   portstransp pt,
                       portspays pz
                WHERE  pt.nomtransp = @Transporteur
                       AND Charindex(CONVERT(CHAR(1), pt.idtransp), pz.transporteurs) > 0
                       AND pz.paysfr IN ( 'FRA', @Pays )
     
                --IF @B = 0
                IF @@ROWCOUNT = 0
                  SET @Result = 10
                ELSE
                  BEGIN
                      IF @NombreArticles <= @NCD
                        SET @Result = @T1
                      ELSE
                        SET @Result = @T2
                  END
            END
     
          RETURN @Result
      END
    ++

  7. #7
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    Bon :-( ... J'avais du faire une "coquille" dans mon code parce qu'effectivement, comme ça c'est bon.

    Merci et désolé du dérangement.

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

Discussions similaires

  1. [PDO] Compter le nombre de lignes d'une requête SELECT
    Par juJuv51 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2008, 13h49
  2. [PDO] Compter le nombre de lignes d'une requête SELECT
    Par WerKa dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/06/2007, 20h57
  3. Réponses: 2
    Dernier message: 11/12/2006, 12h38
  4. Compter le nombre de lignes d'une requête sélection
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/07/2006, 12h11
  5. Requête UNION renvoie pas le bon nombre de lignes
    Par le lynx dans le forum Contribuez
    Réponses: 2
    Dernier message: 29/06/2006, 10h52

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