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

Posted

技术标签:

【中文标题】使用 select 语句在表值函数中传递参数【英文标题】:pass parameter in table valued function using select statement 【发布时间】:2013-11-02 19:58:15 【问题描述】:

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

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】:

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

【讨论】:

感谢它为我工作。我还有一些困难,但我将它们作为一个单独的问题发布。 搜索了几个小时后(主要是错误的关键字可能是),我来到了这个问题。它拯救了我的一天。谢谢 这一项做得很好,我不会经常使用交叉应用,所以我总是要去查一下:)

以上是关于使用 select 语句在表值函数中传递参数的主要内容,如果未能解决你的问题,请参考以下文章

通过在 SQL Server 2000 中传递变量参数来加入表值函数

如何为 DB2 表值函数传递日期参数

SqlDbType.Structured 在 NHibernate 中传递表值参数以选择不带:param?

在表值函数中使用 SQL Server 2008 中的动态 SQL 语句 [重复]

表值参数

T-SQL 多语句表值函数