如何合并由select中调用的函数返回的表?

时间:2019-05-12 01:08:25

标签: sql sql-server

我创建了一个函数,该函数采用nvarchar并返回一个包含一列和可变行数的表。

问题是我需要像这样调用函数

SELECT fn_My_Func(V.Value)
FROM tblValues V

如何为表中的每一行调用函数,然后将结果合并到单个结果集中?

2 个答案:

答案 0 :(得分:1)

您可以使用交叉应用

SELECT *  FROM tblValues V
CROSS APPLY fn_My_Func(V.Value) L;

APPLY运算符允许您联接两个表表达式;每次对左表表达式中的每一行都处理右表表达式。您可能已经猜到了,首先对左表表达式求值,然后对左表表达式的每一行针对最终结果集对右表表达式求值。最终结果集包含从左表表达式中选择的所有列,然后是右表表达式中的所有列。

SQL Server APPLY运算符具有两个变体;交叉申请和外部申请

  • CROSS APPLY运算符仅返回左表中的那些行 表达式(在最终输出中)是否与正确的表匹配 表达。换句话说,右表表达式返回行 仅适用于左侧表格表达式匹配。
  • OUTER APPLY运算符返回左表中的所有行 表达式,无论其是否与正确的表表达式匹配。 对于那些在行中没有相应匹配项的行 右表表达式,它在列的列中包含NULL值 右表表达式。
  • 因此,您可能得出结论,“交叉申请”等同于“内部联接” (或更准确地说,就像具有关联的CROSS JOIN 子查询)的隐式连接条件为1 = 1,而OUTER APPLY等效于LEFT OUTER JOIN。

答案 1 :(得分:1)

您可以使用_KerasModel,但是最简单的语法是:

cross apply

调用函数时,您需要包括架构名称。