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 :

pb avec une fonction


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Points : 24
    Points
    24
    Par défaut pb avec une fonction
    Bonjour

    j'ai créé une requete qui me renvoie une table.

    Je ne sais pas si je dois utiliser une fonction ou un procedure stockée pour ca.

    Je vous donne le code qui compile dans les 2 fichiers.
    Dans l'un, okSansFonc, ma requete qui marche.

    Dans l'autre, la meme requete dans une fonction : ca ne marche pas.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    "ca ne marche pas"
    Dans ton cas, quelle est la traduction de "ca ne marche pas" ?

    Vire déjà les 'print' si tu veux créer la fonction, ca ira mieux


    Sinon, voici un exemple idiot d'une fonction qui remplit, via un curseur, une table renvoyé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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    CREATE FUNCTION fn_listTable (@id int)
    RETURNS @TABLE TABLE (id int null, val1 float null, val2 float null) AS  
    BEGIN 
     
     
    DECLARE @ID_C INT
    DECLARE @VAL1 float
    DECLARE  @VAL2 float
     
    DECLARE cur_T CURSOR FOR
    SELECT ID FROM test
    where ID <>@ID
     
    OPEN Cur_T
    FETCH NEXT FROM cur_T INTO @ID_C
    WHILE @@FETCH_STATUS = 0
    BEGIN
    	SELECT
    		 @VAL1= VALUE, 
    		@VAL2 = VALUE2
    	FROM test
    	WHERE ID = @ID_C
     
    	INSERT INTO @TABLE
    	SELECT @ID_C, @VAL1, @VAL2
     
    	FETCH NEXT FROM cur_T INTO @ID_C
     
    END
    CLOSE cur_T
    DEALLOCATE cur_T
    RETURN 
    END

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    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
     
    Serveur : Msg 443, Niveau  16, État 2, Procédure FN_ALLTABLES, Ligne 29
    Utilisation incorrecte de 'DROP TABLE' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 96
    Utilisation incorrecte de 'SELECT INTO' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 113
    Utilisation incorrecte de 'DELETE' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 114
    Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 119
    Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 124
    Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 129
    Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.
    Serveur : Msg 444, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 134
    La sélection d'instructions incluses dans une fonction ne peut pas renvoyer les données à un client.
    désolé
    voici les erreurs qui me sont retournées lorsque j'execute la fonction
    et j'ai viré les print

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    bonjour,

    En regardant l'aide en ligne, à l'entrée CREATE FUNCTION, tu trouveras la liste des opérations possibles dans une fonction. DROP TABLE par exemple n'en fait pas partie.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    merci pour l'info rudib
    j'ai fait pas mal de recherches sur les fonctions et procedures mais les reponses sont tellement nombreuses et diverses que j'ai certainement raté la section dont tu me parles.

    est-ce que tu pourrais me mettre le lien stp ?

    par ailleurs, meme en enlevant le DROP TABLE de la fonction, j'ai toujours ces erreurs dans mon code :
    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
     
    Serveur : Msg 443, Niveau  16, État 2, Procédure FN_ALLTABLES, Ligne 93
    Utilisation incorrecte de 'SELECT INTO' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 110
    Utilisation incorrecte de 'DELETE' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 111
    Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 116
    Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 121
    Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.
    Serveur : Msg 443, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 126
    Utilisation incorrecte de 'INSERT' à l'intérieur d'une fonction.
    Serveur : Msg 444, Niveau  16, État 1, Procédure FN_ALLTABLES, Ligne 131
    La sélection d'instructions incluses dans une fonction ne peut pas renvoyer les données à un client.
    Je vais reformuler la question de mon 1er post autrement.
    Pour executer ce code correctement, dois-je utiliser une fonction ou une procédure stockée ?
    Dans tous les cas, pouvez-vous me decrire la methode ?

    merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Une procedure stockée me semble plus adéquat.

    CF les excellents cours proposés sur ce site

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    comment declares-tu que la procedure renvoie une table ?
    où mets tu la declaration de la table ?

    sur cette page, les explications sont minimes :
    http://barlatier.developpez.com/csha...stockee/cours/

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    ok ca marche en tant que procedure stockée

    et puisque je crée une table (non temporaire) dans ma procedure, elle perdure au dela de la procedure.
    Je n'ai donc pas besoin de renvoyer une table.

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

Discussions similaires

  1. [Lisp] Communiquer avec une fonction en c++
    Par Nadine dans le forum Lisp
    Réponses: 5
    Dernier message: 10/01/2005, 20h15
  2. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  3. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15
  4. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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