Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/11/2010, 16h26   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 54
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 54
Points : 16
Points : 16
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
stever50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 16h40   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 937
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 937
Points : 17 745
Points : 17 745
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 13h54   #3
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 54
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 54
Points : 16
Points : 16
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 :
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 ?
stever50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 14h15   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 937
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 937
Points : 17 745
Points : 17 745
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 14h26   #5
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 54
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 54
Points : 16
Points : 16
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
stever50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 14h37   #6
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 5 354
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 5 354
Points : 9 745
Points : 9 745
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
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 15h22   #7
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 54
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 54
Points : 16
Points : 16
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.
stever50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 21h32   #8
Membre du Club
 
Homme Patrick LAMBIN
Retraité
Inscription : décembre 2010
Messages : 23
Détails du profil
Informations personnelles :
Nom : Homme Patrick LAMBIN
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : décembre 2010
Messages : 23
Points : 41
Points : 41
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
Papy Normand est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h11.


 
 
 
 
Partenaires

Hébergement Web