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 :

Créer une fonction scalaire et l'exécuter


Sujet :

Développement SQL Server

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 352
    Points : 182
    Points
    182
    Par défaut Créer une fonction scalaire et l'exécuter
    Bonjour,

    J'ai créé la fonction suivante afin de comparer 3 valeurs numériques et retenir la valeur Max

    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 FUNCTION LONGUEUR (
    	@val1 DECIMAL(4, 3)
    	,@val2 DECIMAL(4, 3)
    	,@val3 DECIMAL(4, 3)
    	)
    RETURNS DECIMAL(4, 3)
    AS
    BEGIN
    	IF @val1 >= @val2
    		AND @val1 >= @val3
    		RETURN @val1
     
    	IF @val2 >= @val1
    		AND @val2 >= @val3
    		RETURN @val2
     
    	IF @val3 >= @val1
    		AND @val3 >= @val2
    		RETURN @val3
     
    		RETURN NULL 
    END
    la fonction a bien été créée mais je ne sais pas comment l'exécuter pour remplir ma nouvelle colonne "Nouvelle_valeur"

    merci d'avance

  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 768
    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 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    SELECT dbo.LONGUEUR(...)

    le schéma SQL est OBLIGATOIRE en préfixe des UDF.

    Cela dit, les fonctions scalaires sont à proscrire si vous voulez des performances. Et vous pouvez vous en passer en mettant un CASE dans la requête !

    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 habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 352
    Points : 182
    Points
    182
    Par défaut
    merci de votre réponse, j'ai une erreur avec le CASE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    UPDATE table_article
    SET longueur = (
    		SELECT CASE 
    				WHEN val1 >= val2
    					AND val1 >= val3
    					THEN val1
    				WHEN val2 >= val1
    					AND val2 >= val3
    					THEN val2
    				ELSE val3
    				END
    		FROM table_article
    		)
    j'ai l'erreur ci dessous

    La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression.
    comment interpréter et résoudre cela svp ?

  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 768
    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 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Il va falloir réviser le SQL ! Mon cours peut vous y aider :
    https://sqlpro.developpez.com/cours/sqlaz/dml/#LIV
    https://sqlpro.developpez.com/SQL_synthex_2010_400.jpg

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE table_article
    SET longueur = CASE 
                          WHEN VAL1 >= VAL2
                               AND VAL1 >= VAL3
                               THEN VAL1
                          WHEN VAL3 >= VAL2
                               THEN VAL3
                          ELSE VAL2
                    END
    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/ * * * * *

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

Discussions similaires

  1. Création, exécution d'une fonction scalaire
    Par Vinc06 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/07/2014, 13h07
  2. Créer une fonction en exécutable
    Par jolona dans le forum VB.NET
    Réponses: 1
    Dernier message: 03/11/2012, 08h56
  3. Créer une Fonction recherche sur Access
    Par remwideco dans le forum Access
    Réponses: 4
    Dernier message: 30/01/2006, 10h36
  4. Réponses: 6
    Dernier message: 10/08/2005, 11h36
  5. Créer une fonction mathématique pendant l'exécution
    Par zeprogrameur dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2004, 11h36

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