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 :

proc. stockée : Bigint comme valeur de retour


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut proc. stockée : Bigint comme valeur de retour
    Bonjour,
    Une procédure stockée devrait me retourner une valeur de type BigInt que je traite par la suite dans un prgm .Net.
    Hors, un message d'erreur apparait :
    Arithmetic overflow error converting expression to data type int.

    D'après ce que j'ai compris, le type "natif" de retour de sql est int mais est-ce que il y a un moyen de "forcer" en BigInt ?

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Non ! Cette valeur est le code de retour système. Ne JAMAIS l'utiliser sinon vous masqueriez les erreurs en retour !

    Pour passer une valeur en output au niveau d'une proc, il faut définir un paramètre output. Lisez le tuto que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...nsactsql/#L4.2

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

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Non ! Cette valeur est le code de retour système. Ne JAMAIS l'utiliser sinon vous masqueriez les erreurs en retour !

    Pour passer une valeur en output au niveau d'une proc, il faut définir un paramètre output. Lisez le tuto que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...nsactsql/#L4.2

    A +
    Merci pour l'aide et l'excellent lien !
    si je comprends bien en lisant votre article, il ne faut non plus pas faire :

    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
     
    -- dans une proc. stockée
    DECLARE @returnVal INT
    exec @returnVal = dbo.uneAutreProcStockee 10, 20
     
    -- tester @returnVal
    --...
     
    -- contenu de l'autre proc. stockée 
    ...
    @para1 INT
    ,@para2 INT
     
    IF @para1 = @para2 BEGIN
    	RETURN 0
    END
    IF @para1 < @para2 BEGIN
    	RETURN 1
    END
    IF @para1 > @para2 BEGIN
    	RETURN -1
    END
    ...
    car ça cacherait la valeur de retour système ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    OUI !

    Vous devez déclarer une valeur OUTPUT dans la liste des paramètres....

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

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    OUI !

    Vous devez déclarer une valeur OUTPUT dans la liste des paramètres....

    A +
    Donc, dans un programme .NET, l'utilisation d'un SqlParameter ayant pour direction ReturnValue doit seulement être utilisé afin de tester "l'état" du server SQL...
    Merci pour toutes ces précisions. J'aurai qq programmes à corriger...
    bon week end

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par stever50 Voir le message
    Donc, dans un programme .NET, l'utilisation d'un SqlParameter ayant pour direction ReturnValue doit seulement être utilisé afin de tester "l'état" du server SQL...
    Non, plutôt le résultat de la procédure.L'état du serveur n'a rien à voir la dedans.

    Ceci dit, comme le signifie SQLPro, un proc stoc n'est pas une fonction, et son code de retour est "incident" à la procédure.

    Et dans le cas proc stoc d'une ne retournant pas de données mais retournant un code de retour , il n'y pas besoin de paramètres en sortie, le paramètre de retour sera avantageusement récupérer dans le retour de la méthode ExecuteScalar.

    En revanche si la PS retourne des données, on va l'appeler avec un ExecuteReader, et là il faudra préciser si elle retourne un code de sortie un paramètre en ReturnValue.

    Si elle a des paramèetre décrit OUTPUT, il faudra utiliser des paramères avec Output dans la propriétés Direction.

    Bien sur tous les cas peuvent se combiner( PS retournant des données, plus des params OUTPUT, plus code de retour).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 55
    Points : 44
    Points
    44
    Par défaut
    J'ai pris un raccourci en disant "état" du server mais je pensais resultat de la proc. stockée. :-)

    Par contre, je trouve qd-même un peu bizzare que SQL server permette de pouvoir faire un RETURN d'une valeur INT dans le code sans qu'aucun paramètre de type Output aye au préalable été déclaré [?!] . ou alors j'ai rien compris :-/
    C'est dangereux pour des gars comme moi qui manipulons des données sans vraiment connaitre de quoi il s'agit :-) ... mais je ne demande qu'à m'améliorer !

    En tout cas merci à vous 2 pour toutes ces précisions.

  8. #8
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 34
    Points : 50
    Points
    50
    Par défaut Précision sur le code retour
    D'apès la documentation en ligne, le code retour d'une procédure stockée est
    "retourner une valeur d'état à une procédure ou à un traitement appelant pour indiquer une réussite ou un échec (et la raison de l'échec)."

    Le code retour en réalité n'est utilisé que pour les traitements batch ( en lots ) . Il permet de faire des branchements ou éviter de continuer le travail si une erreur est identifiée. Je pense que seules les sociétés qui utilisent ce genre de traitement connaissent l'utilité de ce code retour et s'en servent encore.

    Bonne journée

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

Discussions similaires

  1. [10g] Fonction stockée et table comme valeur de retour
    Par quaterbac dans le forum PL/SQL
    Réponses: 4
    Dernier message: 06/05/2014, 16h17
  2. Réponses: 1
    Dernier message: 25/11/2006, 16h21
  3. [2000] Récupérer la valeur de retour d'une procédure stockée
    Par drinkmilk dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/08/2006, 10h46
  4. Réponses: 6
    Dernier message: 23/05/2005, 11h47
  5. Valeur de retour d'une procédure stockée
    Par Rudyweb dans le forum MFC
    Réponses: 4
    Dernier message: 25/02/2005, 18h52

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