apply有两种形式 cross apply和 outer apply; CROSS APPLY 仅返回外部表中通过表值函数生成结果集的行。OUTER APPLY 既返回生成结果集的行,也返回不生成结果集的行,其中表值函数生成的列中的值为 NULL。
看一下例子:
select * from table1 join MyFunction(1) on 1=1
MyFunction 的参数是一个常量,可以返回一个表。
但有时候我们希望以 table1 的字段作为参数,传进函数去计算,像:
select * from table1 join MyFunction(id) on 1=1
这样是会出错的。这个时候我们就可以用 apply 来实现了。例如:
select * from table1 cross apply MyFunction(id) on 1=1
简单的说,apply 允许我们将前面结果集每一行的数据作为参数,传递到后面的表达式,后面的表达式可以是一个表值函数,或者select结果集。