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 :

Besoin d'aide avec store procedure


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 75
    Points
    75
    Par défaut Besoin d'aide avec store procedure
    Salut a tous je suis entrain de faire une store procedure et elle me donne toujours une erreur j'ai tester ma requette elle fonctionne tres bien elle me donne le résultat voulu mais quand j'essaie de créer ma procédure elle me donne cette erreur:
    Msg*116, Niveau*16, État*1, Procédure*spGetPrixPrimeFromPk, Ligne*15
    Une seule expression peut être spécifiée dans la liste de sélection quand la sous-requête n'est pas introduite par EXISTS.

    Voici mon code pour la création de ma procédure:
    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
    /*6) Faire une SP qui retourne dans un Recordset (par SELECT) le prix d'une prime d'assurance pour un client dont le Pk 
    est passé en paramètre.  Le calcul se fait comme suit:  
    Prix de base 10$.  
    Pour les hommes ajoutez 3.50$, pour les femmes enlevez 2.50$. 
    Pour les plus de 30 ans, ajoutez $3, pour les plus de 50 ans, ajoutez 10%.*/
     
    --création de la procédure
    create procedure dbo.spGetPrixPrimeFromPk
    @PkClient int,
    @Prix decimal(6,1) output
    as
    set @Prix= (select sexe,DateNaissance,
    case
    	when Sexe ='M' and DATEDIFF(year,DateNaissance,GETDATE())<30 then 10+3.5
    	when Sexe='M' and DATEDIFF(year,DateNaissance,GETDATE())>30 and DATEDIFF(year,DateNaissance,GETDATE())<50 then 10+3.5+3
    	when Sexe='M' and DATEDIFF(year,DateNaissance,GETDATE())>50 then ((10+3.5)*0.1)+(10+3.5)
    	when Sexe ='F' and DATEDIFF(year,DateNaissance,GETDATE())<30 then 10-2.5
    	when Sexe='F' and DATEDIFF(year,DateNaissance,GETDATE())>30 and DATEDIFF(year,DateNaissance,GETDATE())<50 then 10-2.5+3
    	when Sexe='F' and DATEDIFF(year,DateNaissance,GETDATE())>50 then ((10-2.5)*0.1)+(10-2.5)
    	end as PrixPrime 
    	from Clients 
    	where PkClient=@PkClient)
    go
    --test procédure
    declare @PrixPrime decimal(6,2)
    exec dbo.spGetPrixPrimeFromPk 1,@PrixPrime output
    print 'Le prix de la prime est: '+@PrixPrime

  2. #2
    Membre averti Avatar de pulsdrum
    Homme Profil pro
    MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Inscrit en
    Juillet 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : MVP SQL Server - Consultant en Business Intelligence - MCITP, MCTS et MCSA SQL Server 2008/2012
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 61
    Points : 335
    Points
    335
    Par défaut
    Bonjour

    Tu avais plusieurs petites erreurs :
    - Lorsque tu écris « SET @Prix= (SELECT sexe, DateNaissance, »… SQL Server ne peut pas savoir la valeur qu'il doit mettre dans @Prix puisque tu en sélectionne plusieurs.
    - Pour afficher « @PrixPrime » à la suite d’une chaine de caractère il te faut le convertir.

    Voici ta procédure rectifiée :
    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
    CREATE procedure dbo.spGetPrixPrimeFromPk
    @PkClient int,
    @Prix decimal(6,1) output
    AS
    	WITH maTable as
    		(SELECT PkClient,sexe,DateNaissance,
    		case
    			when Sexe ='M' AND DATEDIFF(year,DateNaissance,GETDATE())<30 then 10+3.5
    			when Sexe='M' AND DATEDIFF(year,DateNaissance,GETDATE())>30 AND DATEDIFF(year,DateNaissance,GETDATE())<50 then 10+3.5+3
    			when Sexe='M' AND DATEDIFF(year,DateNaissance,GETDATE())>50 then ((10+3.5)*0.1)+(10+3.5)
    			when Sexe ='F' AND DATEDIFF(year,DateNaissance,GETDATE())<30 then 10-2.5
    			when Sexe='F' AND DATEDIFF(year,DateNaissance,GETDATE())>30 AND DATEDIFF(year,DateNaissance,GETDATE())<50 then 10-2.5+3
    			when Sexe='F' AND DATEDIFF(year,DateNaissance,GETDATE())>50 then ((10-2.5)*0.1)+(10-2.5)
    		end AS PrixPrime 
    		FROM Clients 
    		)
    	SELECT @Prix=PrixPrime FROM maTable WHERE maTable.PkClient=@PkClient
    go
     
    declare @PrixPrime decimal(6,1)
    exec dbo.spGetPrixPrimeFromPk 1,@PrixPrime output
    print 'Le prix de la prime est: '+ convert(varchar(10),@PrixPrime)

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 75
    Points
    75
    Par défaut
    Merci beaucoup pour ton aide ça fonctionne

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

Discussions similaires

  1. Besoin d'aide avec Regexp::Assemble
    Par mobscene dans le forum Modules
    Réponses: 5
    Dernier message: 11/04/2007, 12h39
  2. [ASA] J'ai besoin d'aide avec sybase et vb6 svp !!
    Par tibo830 dans le forum SQL Anywhere
    Réponses: 7
    Dernier message: 12/05/2006, 10h09
  3. Besoin d'aide avec TinyXML
    Par Clad3 dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 15/08/2005, 18h20
  4. Réponses: 2
    Dernier message: 29/08/2003, 17h52
  5. Besoin d'aide avec postgresql sous windows NT
    Par Chihuahua dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 18/07/2003, 08h29

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