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

Langage SQL Discussion :

Fonction et nom de table inconnue - probablement un cas d'ecole !


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 16
    Points : 13
    Points
    13
    Par défaut Fonction et nom de table inconnue - probablement un cas d'ecole !
    Bonjour,

    Je souhaite créer une fonction qui renvoie une table.
    Je ne connais pas le nom de la table sur laquelle la requete va etre faite est c'est de la d'ou vient toutes mes difficultés.

    Pour faire simple voici le 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
    ALTER FUNCTION [dbo].[GetData]  ( @IDElement int )
    RETURNS @MyTable TABLE (Dates datetime primary key NOT NULL)
    AS
    BEGIN
            -- 1: recupere le nom de la table....
    	DECLARE @tblName varchar(100), @sSQL varchar(300);
    	SELECT @tblName = TblName FROM tblDataTables WHERE TblID=@IDElement;    
            -- 2: Obligé de construire le SQL étant donné que le nom de la table est inconnu
    	SET @sSQL = 'SELECT Dates FROM ' + @tblName 
            -- 3: execute la requete
    	EXEC (@sSQL)	< -- ceci est refusé!
            -- 4: SQL veut obligatoirement un RETURN a la fin
    	RETURN
    END
    Evidemment le code jusqu'au EXEC... inclus marche bien dans Query analyzer. C'est juste qu'en intégrant le code au sein d'une fonction SQL server rejette le code avec pour message:
    Invalid use of side-effecting or time-dependent operator in 'EXECUTE STRING' within a function.
    J'aurai voulu faire un "RETURN @sSQL" mais cela est evidemment impossible.
    Je pensais aussi que sous SQL Server 2008 il était possible d'avoir des noms de table dynamique mais cela ne semble pas marcher non plus.

    Pourriez-vous peut etre avoir l'amabilité de m'indiquer comment résoudre ce probleme SVP ?

    Merci,
    Michael M.

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Une fonction SQL n'accepte pas de SQL dynamique.


  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Chtulus Voir le message
    Une fonction SQL n'accepte pas de SQL dynamique.
    Oui, en effet. Merci.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 15/11/2011, 13h26
  2. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 17h48
  3. erreur nom de table ou de champ inconnu
    Par olam37 dans le forum 4D
    Réponses: 2
    Dernier message: 03/04/2008, 16h25
  4. Fonction divisant argument de type inconnu
    Par Nasky dans le forum C
    Réponses: 9
    Dernier message: 29/07/2003, 01h32
  5. noms des tables d'une base
    Par molto dans le forum SQL
    Réponses: 2
    Dernier message: 17/03/2003, 23h14

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