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 :

Utilisation de "TOP" dans une fonction scalaire


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut Utilisation de "TOP" dans une fonction scalaire
    Bonjour tout le monde,

    Mon collègue vient de me poser une belle colle... Savez-vous s'il est possible d'utiliser la commande "TOP" dans une fonction scalaire SQL Server?

    Si non, connaîtriez-vous une façon pour contourner l'utilisation de TOP?

    Pour info voici la fonction qui pose problème. Elle renvoie le dernier prix pratiqué pour l'article et le client passé en paramètre.

    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
    ALTER FUNCTION [dbo].[fct_get_prix_unitaire]
    (
    	@CLI_COD AS VARCHAR(7),
    	@ART_COD AS VARCHAR(16)
    )
    RETURNS FLOAT
    AS
    BEGIN
    	-- Declare the return variable here
    	DECLARE @PRIX_UNIT AS FLOAT
     
    	-- Add the T-SQL statements to compute the return value here
    	SELECT @PRIX_UNIT = TOP (1) rq_gpao_facture_clients_pos.fdp_pvu_d
    	FROM   rq_gpao_facture_clients_pos LEFT OUTER JOIN rq_gpao_factures_clients ON 
    		      rq_gpao_facture_clients_pos.fdb_num = rq_gpao_factures_clients.fdb_num
    	WHERE  (rq_gpao_factures_clients.fdb_fdbndc <> 'C') AND 
    		   (rq_gpao_facture_clients_pos.art_cod = @ART_COD) AND 
    		   (rq_gpao_facture_clients_pos.cli_cod = @CLI_COD)
    	ORDER BY rq_gpao_facture_clients_pos.fdp_dat_cre DESC
     
    	-- Return the result of the function
    	RETURN @PRIX_UNIT
     
    END
    La fonction si dessus ne fonctionne donc pas je pense à cause du TOP(1) mais je ne sais pas comment faire pour ne pas l'utiliser ou simplement contourner le problème et faire d'une autre manière.

    D'avance merci et bonne fin de journée...

    Julius

  2. #2
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Mettez le même code dans une procédure stockée , éventuellement avec le paramètre @PRIX_UNIT en OUTPUT.

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Points : 114
    Points
    114
    Par défaut
    Merci bien,

    c impec

    Bonne journée

    Julius

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

Discussions similaires

  1. utiliser le resultat d´un select dans une fonction
    Par charlie_p07 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 12/03/2008, 20h54
  2. Utilisation de variables de Gui dans une fonction
    Par campofelliz dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 20/08/2007, 17h46
  3. Réponses: 23
    Dernier message: 10/01/2007, 01h09

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