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 :

HELP : Syntaxe d'une fonction utilisateur


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Par défaut HELP : Syntaxe d'une fonction utilisateur
    Bonjour,

    J'essaye d'imbriquer des if dans une fonction utilisateur le probleme c'est que je ne connais pas trop la syntaxe :
    Pouvez vous m'aider??

    Voici deux exemples
    - 1. Lorsque j'utilise cette fonction sql par exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE FUNCTION dbo.UDFreturnListeDevis(@NomClient nvarchar(50))
    RETURNS  @listeDevis TABLE(id_commande int)
    AS
    BEGIN
     
    	INSERT @listeDevis
    		SELECT	c.id_commande
    		FROM 		Commande as c
    		WHERE 	
    		1=1 
    		If (@NomClient !='')
    			AND 2=2
    	RETURN 
    END

    J'ai ce code d'erreur :
    Erreur 455 : The last statement included within a function must be a return statement.

    - 2. J'essaye d'utiliser une variable

    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
     
    CREATE FUNCTION dbo.UDFreturnListeDevis(@NomClient nvarchar(50))
    RETURNS  @listeDevis TABLE(id_commande int)
    AS
    BEGIN
    declare @toto nvarchar(50);
     
    	If (@NomClient !='')
    		set @toto = ' AND 2=2 ';
     
    	INSERT @listeDevis
    		SELECT	c.id_commande
    		FROM 		Commande as c
    		WHERE 	
    		1=1 
    		@toto 
    	RETURN 
    END
    et la j'ai ce message d'erreur :
    Erreur 170 incorrect syntax near '@toto'

    Merci d'avance pour vos réponses.

  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 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Il n'est pas possible de faire du SQL dynamique dans une UDF.

    Si vous nous exposiez ce que vous voulez faire, on gagnerait du temps !

    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
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Par défaut
    Si tu veux tout savoir, J'essaye justement de faire du sql dynamique via sql server mais je ne sais pas comment m'y prendre.
    J'ai besoin d'encapsuler le plus possible des regles de gestion.


    Et, au fait désolé de te faire perdre ton temps SQLpro.

  4. #4
    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 : 43
    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
    Par défaut
    Salut,

    Je ne comprends pas ce que font WHERE 1=1 et AND 2=2.
    Est-ce que ce n'est pas "WHERE 1e colonne = 1" ?

    Si j'ai compris ce que tu veux faire, on devrait avoir:

    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
     
    CREATE FUNCTION dbo.UDFreturnListeDevis(@NomClient nvarchar(50))
    RETURNS  @listeDevis TABLE(id_commande int)
    AS
    BEGIN
    	IF (@NomClient !='')
    	BEGIN
    		INSERT @listeDevis
    		SELECT c.id_commande
    		FROM Commande c
    		WHERE 2 = 2
    	END
    	ELSE
    	BEGIN
    		INSERT @listeDevis
    		SELECT c.id_commande
    		FROM Commande c
    		WHERE 1 = 1
    	END
    	RETURN
    END
    Tiens-nous au courant

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Utilisez une procédure stockée et comme cela vous pourrez faire du SQL dynamique.

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

  6. #6
    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 : 43
    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
    Par défaut
    Bonjour,

    Il me semble toutefois qu'utiliser du code SQL dynamique est un peu dangereux en terme de performances, puisque la requête est recompilée à chaque appel.
    Suis-je dans le faux ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/12/2006, 14h18
  2. [SQLITE][UDF] syntaxe d'une fonction
    Par nannous dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 31/10/2006, 13h56
  3. syntaxe d'une fonction
    Par john491 dans le forum Général Python
    Réponses: 2
    Dernier message: 01/05/2006, 23h44
  4. Problème avec une fonction utilisateur !
    Par nalou dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/04/2006, 17h06
  5. Retour NULL d'une fonction utilisateur
    Par tiboleo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/11/2004, 15h40

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