2013-10-24 4 views
36

Ich habe eine Tabellenwert-Rückgabe-Funktion erstellt, die mir eine Tabelle zurückgibt. hier ist mein Funktionsaufruf alsübergeben Sie Parameter in Tabellenwert-Funktion mit SELECT-Anweisung

SELECT * FROM dbo.[StateFixedTaxesCalculation](3020,16,1,1006) 

folgen und sein für mich arbeitet OK, jetzt mag ich in einer ausgewählten statment diese Funktion Aufruf verwenden, also kann ich 16 passieren, die im Grunde ist employeeId dynamisch.

So habe ich mich entschieden, innere Verbindung mit Tabelle von dieser Funktion zurückgegeben zu verwenden. Wie dies

SELECT * FROM Employee as E 
INNER JOIN dbo.[StateFixedTaxesCalculation](3020,16,1,1006) as TC ON TC.EmployeeId=E.EmployeeId 

aber jetzt, wie kann ich passieren 16 als dynamischer Wert aller employeeId eins nach dem anderen.

Antwort

56

Verwendung outer/cross apply:

select * 
from Employee as E 
    cross apply dbo.[StateFixedTaxesCalculation](3020, E.EmployeeId, 1, 1006) as TC 

wenn Sie noch durch TC.EmployeeId = E.EmployeeId filtern haben, können Sie dies mit Unterabfrage:

select * 
from Employee as E 
    cross apply (
     select TT.* 
     from dbo.[StateFixedTaxesCalculation](3020, E.EmployeeId, 1, 1006) as TT 
     where TT.EmployeeId = E.EmployeeId 
    ) as TC 
+0

Danke für ihre Werke. Ich habe ein paar mehr Schwierigkeiten, aber ich poste sie als eine getrennte Frage. – rahularyansharma

+3

Nach stundenlanger Suche (meistens mit falschen Stichwörtern) bin ich auf diese Frage gekommen. Es hat meinen Tag gerettet. Danke –

+0

Toller Job auf diesem, ich kann Cross nicht zu oft anwenden, also muss ich immer nachsehen :) – jediCouncilor