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?
Avec la fonction table value, vous utilisez généralement Cross Apply
.
Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
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
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
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