Répondre

5

Dans ce cas, vous pouvez utiliser cette fonction comme une table. Normalement vous effectuez votre requête en écrivant comme;

select * from XTable x where x.col in (select y.col from YTable y) 

Lorsque vous utilisez des fonctions de table, vous pouvez également le faire de la même manière;

select * from XTable x where x.col in (select y.col from dbo.fn_YourFunction(idparameter) y) 

pas que votre fonction table d'une valeur doit renvoyer un résultat avec une colonne nommée « col »

+0

merci ça a marché :) –

0

Vous pouvez toujours joindre à elle.

select yourfields 
from yourtable join yourfunction on something 
where whatever 

Ceci est logiquement équivalent à ce que vous dites que vous voulez faire.

1

La réponse d'Aykut est la meilleure réponse dans la plupart des circonstances. C'est à noter que l'équivalent join est plus compliqué que le in. Il serait:

SELECT DISTINCT c.* 
FROM caritbl c JOIN 
    dbo.fn_AtamaliCariListe(37) as acl(id) 
    ON c.cari_id = acl.id; 

Notez le DISTINCT. À moins que nous sachions que la fonction renvoie des valeurs uniques, nous en avons besoin.

Maintenant, il peut y avoir des cas où le JOIN est réellement meilleur. Si la fonction est non déterministe, il est possible que SQL Server la réévalue à plusieurs reprises pour chaque ligne traitée par le IN. Je ne sais pas si SQL Server ferait cela, mais c'est possible. Un JOIN garantit que la fonction n'est évaluée qu'une seule fois.

2

Faites simplement un SELECT avec la fonction.

--Sample Table 
    SELECT 12 AS A 
    INTO #Temp 

    --Query here 
    SELECT * FROM #Temp WHERE A IN(
    SELECT [transform].[Maximum] (10,12)) 

Cela devrait faire l'affaire