sql - 如何合并select中调用的函数返回的表?
问题描述
我创建了一个函数,它接受nvarchar
并返回一个包含一列和可变行数的表。
问题是我需要像这样调用函数
SELECT fn_My_Func(V.Value)
FROM tblValues V
如何为表中的每一行调用该函数,然后将结果合并到一个结果集中?
解决方案
你可以使用交叉应用
SELECT * FROM tblValues V
CROSS APPLY fn_My_Func(V.Value) L;
APPLY 运算符允许您连接两个表表达式;每次从左表表达式的每一行处理右表表达式。正如您可能已经猜到的那样,首先计算左表表达式,然后针对最终结果集的左表表达式的每一行计算右表表达式。最终结果集包含左表表达式中的所有选定列,后跟右表表达式的所有列。
SQL Server APPLY 运算符有两种变体;交叉应用和外部应用
- 如果与右表表达式匹配,则 CROSS APPLY 运算符仅返回左表表达式(在其最终输出中)中的那些行。换句话说,右表表达式只返回左表表达式匹配的行。
- OUTER APPLY 运算符返回左表表达式中的所有行,而不管它是否与右表表达式匹配。对于那些在右表表达式中没有对应匹配的行,它在右表表达式的列中包含 NULL 值。
- 所以你可能会得出结论,CROSS APPLY 相当于一个 INNER JOIN(或者更准确地说,它就像一个带有相关子查询的 CROSS JOIN),隐式连接条件为 1=1,而 OUTER APPLY 相当于一个 LEFT外连接。
推荐阅读
- html - 如何设置图像垂直对齐但水平左对齐?
- maven - 执行 mvn install 时单元测试执行两次
- python - BubbleSort CSV 按特定列
- python - 如何使用两行中的值在 pandas 数据框中创建一列?
- python - 在字典列表中搜索一个键
- c++ - 普通并发代码的吞吐量不会随着线程数的增加而增加
- python - 如何在 Python Beautiful Soup 中获取没有唯一元素的特定文本信息?
- asp.net-mvc - .NET Core MVC - 绑定 DateTime 总是产生 MinValue
- r - purrr + dplyr NSE 问题在用户编写的函数中
- c++ - 无法将 QPushButton::clicked 信号连接到插槽