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
Puis le test
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 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
Et Sql Server me répond :
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 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)
J'ai beau chercher, je ne vois pas où je faute ...La variable scalaire "@AffListe" doit être déclarée.
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 ?
Partager