使用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操作符被使用的时候发生的一样。
使用一个表值表达式