Как заставить левое внешнее объединение UD-функции с любой таблицей SQL? - PullRequest
5 голосов
/ 11 мая 2009

у меня есть стол. У меня есть пользовательская функция (UDF). Мой UDF возвращает мне стол. мне нужно левое внешнее соединение моего стола и моей таблицы UDF.

Ответы [ 2 ]

11 голосов
/ 11 мая 2009

Использование нового предложения SQL Server 2005 APPLY. Предложение APPLY позволяет вам присоединить таблицу к табличной функции. Это давайте напишем запрос вроде этого:

SELECT  C.CustomerID, 
    O.SalesOrderID,
    O.TotalDue
FROM 
    AdventureWorks.Sales.Customer AS C
CROSS APPLY
    AdventureWorks.dbo.fn_GetTopOrders(C.CustomerID, 3) AS O
ORDER BY 
    CustomerID ASC, TotalDue DESC

Предложение APPLY действует как JOIN без предложения ON. Существует два варианта: CROSS и OUTER. Предложение OUTER APPLY возвращает все строки слева (клиенты), независимо от того, возвращают ли они какие-либо строки в табличной функции или нет. Столбцы, возвращаемые табличной функцией, будут нулевыми, если не будет возвращено ни одной строки. CROSS APPLY возвращает строки только с левой стороны (клиенты), если табличная функция возвращает строки.

Источник: Использование CROSS APPLY в SQL Server 2005

РЕДАКТИРОВАТЬ: Как упомянул Ливен, CROSS APPLY необходим только тогда, когда вам нужно передать значение из таблицы в UDF.

2 голосов
/ 11 мая 2009

Редактировать

Если вам не нужно передавать параметр в вашу UDF, вы можете просто объединить таблицу с вашей UDF. Если вам нужно передать параметры, используйте CROSS APPLY, как указано в другом ответе.

SELECT *
FROM dbo.YourTable yt
     LEFT OUTER JOIN dbo.UDF_YourUDF() yd ON yd.YourTableID = yt.YourTableID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...