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:
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:
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
J'aurai voulu faire un "RETURN @sSQL" mais cela est evidemment impossible.Invalid use of side-effecting or time-dependent operator in 'EXECUTE STRING' within a function.
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.
Partager