Как объединить таблицы, возвращаемые функцией, вызываемой в select? - PullRequest
0 голосов
/ 12 мая 2019

Я создал функцию, которая принимает nvarchar и возвращает таблицу из одного столбца и переменного количества строк.

Проблема в том, что мне нужно вызывать функцию следующим образом

SELECT fn_My_Func(V.Value)
FROM tblValues V

Как я могу вызвать функцию для каждой строки в таблице и затем объединить результаты в один набор результатов?

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Вы можете использовать cross apply, но самый простой синтаксис:

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

При вызове функции необходимо указать имя схемы.

1 голос
/ 12 мая 2019

Вы можете использовать перекрестное применение

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

Оператор APPLY позволяет объединять два табличных выражения; правое табличное выражение обрабатывается каждый раз для каждой строки из левого табличного выражения. Как вы уже догадались, сначала проверяется левое табличное выражение, а затем правое табличное выражение для каждой строки левого табличного выражения для окончательного набора результатов. Окончательный набор результатов содержит все выбранные столбцы из левого табличного выражения, за которыми следуют все столбцы правого табличного выражения.

Оператор SQL Server APPLY имеет два варианта; CROSS APPLY и OUTTER APPLY

  • Оператор CROSS APPLY возвращает только те строки из левой таблицы выражение (в его окончательном выводе), если оно совпадает с правой таблицей выражение. Другими словами, правильное табличное выражение возвращает строки только для соответствия левой таблицы выражений.
  • Оператор OUTER APPLY возвращает все строки из левой таблицы Выражение независимо от его соответствия с правильным выражением таблицы. Для тех строк, для которых нет соответствующих совпадений в правое табличное выражение, оно содержит значения NULL в столбцах правильное табличное выражение.
  • Итак, вы можете сделать вывод, что CROSS APPLY эквивалентна ВНУТРЕННЕМУ СОЕДИНЕНИЮ (или, если быть более точным, это как CROSS JOIN с коррелированным подзапрос) с неявным условием соединения 1 = 1, тогда как OUTER ПРИМЕНИТЬ эквивалентно левому внешнему соединению.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...