Ich habe eine Tabellenwertfunktion, die eine Tabelle zurückgibt. Wenn ich versuche, die Tabellenwertfunktion mit einer anderen Tabelle zu JOIN
zu bekommen, bekomme ich keine Ergebnisse, aber wenn ich das Ergebnis der Funktion in eine tatsächliche Tabelle kopiere und denselben Join mache, bekomme ich die erwarteten Ergebnisse.
Die Abfrage sieht ungefähr so aus:
Select *
From myTable
INNER JOIN fn_function(@parm1, @param2)
ON ....
Alles in allem habe ich ungefähr 4 solche Abfragen und jede hat eine etwas andere Funktion, aber alle Funktionen erzeugen dieselbe Tabelle, aber unterschiedliche Daten. Für einige dieser Abfragen funktioniert der INNER JOIN
, für andere jedoch nicht.
Irgendwelche Vorschläge, warum dies passiert?
Bei der Tabellenwertfunktion verwenden Sie im Allgemeinen Cross Apply
.
Select *
From myTable m
CROSS APPLY fn_function(m.field1, m.field2)
Ich denke das sollte funktionieren
Select *
From Animals
Join dbo.AnimalsTypesIds(900343)
As AnimalsTypes
On AnimalsTypes.TypeId = Animals.TypeId
In Tabellenwertfunktionen sollte die Rückgabetabelle TypeId aufweisen, damit der Join für diese Klausel funktioniert
Wenn wir einige Annahmen machten, dass Parameter von Tabellenwertfunktionen nicht dynamisch von myTable-Spalten abhängen, funktioniert dies.
SELECT *
FROM myTable
INNER JOIN
(SELECT * from fn_function(@para1, @para2 etc))
ON ...
wenn die Parameter jedoch von myTable abhängig sind, funktioniert dies nicht
Ihre "ON" -Klausel des Joins ist höchstwahrscheinlich falsch. Vielleicht ein kleiner Tippfehler
JOIN x ON oID = odID
anstatt
JOIN x ON oID = oID