Fonction avec parametre table
Bonjour,
J'essaye de réaliser une fonction qui reçoit un paramètre table, et j'ai un message surprenant
voici un exemple :
Tout d'abord, créer un type Table et la fonction qui va recevoir ce type
Code:
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
| Create Type tbl_ListeProrata as TABLE
(
Id varchar(255) not null,
Montant money null
)
go
Create function dbo.fn_Prorata (@Liste as dbo.tbl_ListeProrata ReadOnly)
RETURNS @Result TABLE
(
Id varchar(255) not null,
Montant money null,
Coeff decimal(20,17) null
)
AS BEGIN
with Toto(Total) as
( Select Total = Sum(IsNull(Montant,0)) from @Liste)
insert @Result
Select L.Id, L.Montant, L.Montant/T.Total
from @Liste as L, Toto as T
RETURN
END
go |
Puis le test
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
Create Table #Tata
( IdTata int not null,
Montant money null
)
Insert into #Tata Values( 1, 158.10)
Insert into #Tata Values( 2, 780.5)
Insert into #Tata Values( 3, 980.25)
Insert into #Tata Values( 4, 1980.25)
Insert into #Tata Values( 5, 1245)
Declare @AffListe as dbo.tbl_ListeProrata
Insert into @AffListe (Id,Montant)
Select Id = convert(varchar(255),IdTata), Montant = Montant from #Tata
Select *
from dbo.fn_Prorata(@AffListe) |
Et Sql Server me répond :
Citation:
La variable scalaire "@AffListe" doit être déclarée.
J'ai beau chercher, je ne vois pas où je faute ...
Et sur le net, outre Microsoft qui décrit les étapes pour y parvenir complété d'un exemple ... de procédure stocké, je n'ai trouvé que ça voir la réponse de Lukasz Lysik du Oct 22 '09 at 18:42
Son exemple tel quel fonctionne, dès que je le transforme pour que la fonction retourne une table, le message revient !
Est-ce à dire qu'une fonction qui reçoit une table ne peut pas en renvoyer elle même une ?