web-dev-qa-db-ja.com

selectステートメントを使用してテーブル値関数のパラメーターを渡す

テーブルを返すテーブル値戻り関数を作成しました。以下は私の関数の呼び出しです

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

そして、それは私にとっては問題なく動作し、今私はselect statmentでこの関数呼び出しを使用したいので、基本的にemployeeIdである16を動的に渡すことができます。

だから私はその関数によって返されたテーブルで内部結合を使用することにしました。このような

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

しかし、今ではどのようにして16をすべてのemployeeIdの動的な値として1つずつ渡すことができますか。

36

outer/cross apply を使用します。

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

それでもTC.EmployeeId = E.EmployeeIdでフィルタリングする必要がある場合は、サブクエリでこれを行うことができます。

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
60
Roman Pekar