高级T-SQL进阶系列 (二)【上篇】:使用 APPLY操作符

时间:2022-01-02 06:26:28

使用OUTER APPLY 操作符

 

OUTER APPLY操作符工作起来和CROSS APPLY比较类似。唯一的不同在于OUTER APPLY操作符对于那些从表值函数不返回任何数据行的列仍旧会返回结果集。为了看其是如何工作的我们可以查看列表3的代码。

USE tempdb;
GO
SELECT  *
FROM    dbo.SearchString AS S
        OUTER APPLY dbo.FindProductLike(S.String);

  列表3:OUTER APPLY示例

 当我运行列表3的代码,将得到报告2的输出结果。

ID    String           ProductName                Price
----- ---------------- -------------------------- ---------
1     Red              Red Santa Suit             199.99
1     Red              Red Bells                  49.99
2     Lights           LED Lights                 6.99
3     Star             NULL                       NULL

  报告2:通过运行列表3的代码产生的输出

通过使用OUTER APPLY操作符,你可以看到对于字符串值“Star”,存在一个数据行,其ProductName列和Price列均为Null值。这是因为SearchString表的字符串值“Star”并没有发现是Product表的任何ProductName列的一部分。当表值函数dbo.FindProductLike使用了列值而返回了一个空的数据行集时,SQL SERVER便会对表值函数产生的数据列赋以null值。OUTER APPLY操作符的这个功能类似与当在两个表之间使用OUTER JOIN而并没有匹配行的情形。当一个字符串传递给表值函数dbo.FindProductLike并确实返回数据行时,那么SearchString表的数据行便会与表值函数的结果进行关联,如果一个CROSS APPLY操作符被使用的时候发生的一样。

使用一个表值表达式