web-dev-qa-db-fra.com

INNER JOIN avec la fonction Table-Valued ne fonctionne pas

J'ai une fonction table évaluée qui retourne une table. Lorsque j'essaie de JOIN la fonction table-value avec une autre table, je n'obtiens aucun résultat, mais lorsque je copie le résultat de la fonction dans une table réelle et que je fais la même jointure, les résultats attendus sont obtenus.

La requête ressemble à ceci:

Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....

En tout, j'ai environ 4 requêtes de ce type et chacune a une fonction légèrement différente, mais toutes les fonctions produisent la même table mais des données différentes. INNER JOIN fonctionne pour certaines de ces requêtes, mais pas pour d'autres.

Tout suggérant pourquoi cela se produit?

28
user2343837

Avec la fonction table value, vous utilisez généralement Cross Apply

Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
61
Anup Agrawal

Je pense que cela devrait fonctionner

  Select * 
    From Animals 
    Join dbo.AnimalsTypesIds(900343) 
      As AnimalsTypes
      On AnimalsTypes.TypeId = Animals.TypeId

Dans la fonction table value, la table return devrait avoir TypeId pour que join fonctionne sur cette clause

1
Nayas Subramanian

Si nous supposons que les paramètres des fonctions de table ne dépendent pas des colonnes myTable de manière dynamique, cela fonctionnera.

   SELECT *
    FROM myTable 
    INNER JOIN

    (SELECT * from fn_function(@para1, @para2 etc))
 ON ...

mais si les paramètres dépendent de myTable, cela ne fonctionnera pas

1
user2343837

Votre clause "ON" de la jointure est probablement incorrecte. Peut-être une petite faute de frappe comme 

JOIN x ON oID = odID

au lieu de

JOIN x ON oID = oID

0
nicko