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 :

connaitre le SET ROWCOUNT


Sujet :

MS SQL Server

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut connaitre le SET ROWCOUNT
    Bonjour,

    J'utilise le pour limiter mon jeu de résultat.
    Et je souhaiterai récupérer par la suite la valeur du ROWCOUNT correspondant au réglage et non @@ROWCOUNT qui correspond au nombre d'élément réellement traités.

    Mais je n'arrive pas a savoir ou récupérer ce paramètre.

    Merci de vos lumières

  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
    Bonsoir,

    Si c'est la valeur du "n" le petit exemple suivant devrait surement vous aider


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DECLARE @n INT
    SET @n = 5
    SET ROWCOUNT @n
     
    SELECT * FROM matable;
     
    -- Récupération valeur réglage du i
    SELECT @n;
     
    ...
    ++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Merci à toi,
    Mais j'avais pensé à cette solution, mais j'aurai préféré quelque chose de natif, car j'imagine que SQL stocke cette valeur quelque part!

  4. #4
    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,

    j'imagine que SQL stocke cette valeur quelque part!
    Non, car @@ROWCOUNT est une fonction système.
    Vous n'avez donc aucun autre moyen de trouver cette valeur, d'autant que comme elle n'est valable que pour la session en cours, elle est très volatile.

    Une autre possibilité pour limiter le jeu de résultats est d'utiliser la clause TOP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @nbLignes INT
    SET @nbLignes = 42
     
    SELECT TOP(@nbLignes)
    FROM monSchema.maTable
    Pourquoi cherchez-vous à retrouver le nombre de lignes affecté par une commande ?

    @++

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Merci, donc c'est impossible!
    Je vais donc passer par une variable.

    Je fais différentes choses suivant si le resultat de la requete: @@rowcount ?= ?> ?< set rowcount.
    Et c'est pour m'en servir dans une sp et comme je fais pas mal de traitement dedans, j'aurai trouvé plus simple d'accéder directement au rowcount, c'était plus un confort pour ne pas avoir a passer par une variable supplémentaire.

    Sinon oui il y a le TOP mais si j'ai bien compris la doc (je suis pas expert...), il faut préférer le set rowcount apparament.

  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,

    Cela ne vaut pas mieux, c'est le comportement qui est différent selon que vous utilisez une clause ORDER BY ou non. La remarque donnée par la documentation n'est valable que dans ce cas-là.

    @++

  7. #7
    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 ,

    La clause TOP est à préférer en terme de performance

    ++

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    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 : 21 995
    Billets dans le blog
    6
    Par défaut
    Voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SET ROWCOUNT 3
     
    CREATE TABLE #T (OPT NVARCHAR(128), VAL SQL_VARIANT);
    INSERT INTO #T EXEC ('DBCC USEROPTIONS');
    SELECT VAL FROM #T WHERE OPT = 'rowcount';
     
    VAL
    --------------------
    3
    Cependant à partir de 2005 l'utilisation de TOP n ne pose pas de problème vu que vous pouvez faire un TOP @N

    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/ * * * * *

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Je vais utiliser le TOP!
    Merci de votre aide!

  10. #10
    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
    Voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SET ROWCOUNT 3
     
    CREATE TABLE #T (OPT NVARCHAR(128), VAL SQL_VARIANT);
    INSERT INTO #T EXEC ('DBCC USEROPTIONS');
    SELECT VAL FROM #T WHERE OPT = 'rowcount';
     
    VAL
    --------------------
    3
    OK, j'ai 0

    @++

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

Discussions similaires

  1. SET NOCOUNT ON --> @@ROWCOUNT()
    Par Kropernic dans le forum Administration
    Réponses: 7
    Dernier message: 21/08/2012, 14h58
  2. récupérer la valeur définie par un set rowcount n
    Par sebhuet dans le forum Sybase
    Réponses: 5
    Dernier message: 04/07/2011, 11h09
  3. connaitre le character set d'une base
    Par slausseur dans le forum Administration
    Réponses: 4
    Dernier message: 17/09/2007, 11h30
  4. Connaitre le type de character set
    Par vbcasimir dans le forum Administration système
    Réponses: 4
    Dernier message: 02/08/2005, 13h02
  5. character set // Nls_lang
    Par fopicht dans le forum Oracle
    Réponses: 2
    Dernier message: 23/05/2002, 12h04

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