使用select语句在表值函数中传递参数

时间:2013-10-24 08:06:56

标签: sql sql-server sql-server-2008 tsql sql-function

我创建了一个表值返回函数,它返回一个表。这是我的功能调用如下

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

它的工作正常,现在我想在选择语句中使用此函数调用,因此我可以动态地传递16,这基本上是employeeId

所以我决定使用内部连接和该函数返回的表。喜欢这个

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

但是现在如何将16作为所有employeeId的动态值逐一传递。

1 个答案:

答案 0 :(得分:60)

使用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