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 :

Déclarer une variable dans une fonction


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 43
    Par défaut Déclarer une variable dans une fonction
    Bonjour à tous,

    Voilà je viens vous voir car j'ai un petit soucis dont je ne comprend pas vraiment la cause

    Je viens de créer une fonction toute simple, avec dedans la déclaration d'une variable, mais SQL Server me sort une erreur par rapport à çà.

    Voici ma fonction :

    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
    28
    29
    30
    31
    ALTER FUNCTION [CheckImm]
    (	
    	@nav as bigint
    )
    RETURNS TABLE 
    AS
     
    RETURN 
    (
    	DECLARE @Etat as int
    set @Etat = 0
     
    SELECT top 1 @Etat = No_ FROM dbo.[HD]
    WHERE No_ = @nav
     
    IF @Etat <> 0 
    	BEGIN
    		return 1
    	END
     
    ELSE
    	BEGIN 
    		SELECT @Etat = Entransfert FROM Obj WHERE Nav = @nav
    		IF @Etat = 1 
    			BEGIN
    				return 2
    			END
    		ELSE
    			return 3 
    	END
    )
    Et voici l'erreur qu'il me sort :

    Msg 156, Level 15, State 1, Procedure CheckImm, Line 16
    Incorrect syntax near the keyword 'DECLARE'.
    Msg 102, Level 15, State 1, Procedure CheckImm, Line 37
    Incorrect syntax near ')'.
    Apparemment il est impossible de déclarer une variable ?

    D'avance merci pour votre aide, car là je cale vraiment

  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 996
    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 996
    Billets dans le blog
    6
    Par défaut
    Vous voulez renvoyer une table et faite un retour de scalaire.

    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
    28
    29
    30
    ALTER FUNCTION [CheckImm]
    (	
    	@nav AS bigint
    )
    RETURNS INT
    AS
    BEGIN
     
    DECLARE @Etat AS int
    SET @Etat = 0
     
    SELECT top 1 @Etat = No_ FROM dbo.[HD]
    WHERE No_ = @nav
     
    IF @Etat <> 0 
    	BEGIN
    		RETURN 1
    	END
     
    ELSE
    	BEGIN 
    		SELECT @Etat = Entransfert FROM Obj WHERE Nav = @nav
    		IF @Etat = 1 
    			BEGIN
    				RETURN 2
    			END
    		ELSE
    			RETURN 3 
    	END
    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/ * * * * *

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 43
    Par défaut
    Merci pour votre aide, effectivement je n'avais pas fais attention à çà

    En revanche, j'ai une erreur sur mon dernier retour (return -3)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 455, Level 16, State 2, Procedure CheckImm, Line 36
    The last statement included within a function must be a return statement.
    C'est dû à quoi ?

  4. #4
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 43
    Par défaut
    J'ai modifié la fonction comme ceci :

    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
    28
    29
    30
    31
    32
    33
    ALTER FUNCTION [CheckImm]
    (	
    	@nav AS bigint
    )
    RETURNS INT
    AS
    BEGIN
     
    DECLARE @Etat AS int
    DECLARE @Resultat as INT
    SET @Etat = 0
     
    SELECT top 1 @Etat = No_ FROM dbo.[HD]
    WHERE No_ = @nav
     
    IF @Etat <> 0 
    	BEGIN
    		set @Resultat = 1
    	END
     
    ELSE
    	BEGIN 
    		SELECT @Etat = Entransfert FROM Obj WHERE Nav = @nav
    		IF @Etat = 1 
    			BEGIN
    				set @Resultat = 2
    			END
    		ELSE
    			set @Resultat = 3 
    	END
     
    return  @Resultat 
    END
    Mais maintenant j'obtiens l'erreur suivante :

    Cannot perform alter on 'CheckImm' because it is an incompatible object type.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 43
    Par défaut
    Bon j'ai supprimé la fonction puis je l'ai recrée et ca a l'air de fonctionner maintenant

    Merci bien pour l'aide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/09/2008, 10h41
  2. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  3. Réponses: 4
    Dernier message: 29/01/2008, 11h12
  4. Réponses: 1
    Dernier message: 15/02/2007, 00h24
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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