2014-09-08 2 views
0

У меня есть функция, которая имеет два выхода ...функция Таблицы для каждой записи в запросе

dbo.func1(@code) -> Table(out1, out2) 

Эта функция является слишком дорогостоящей и занимает много времени, чтобы вычислить эти два выхода. и у меня есть запрос, как это:

SELECT code, name, 
(SELECT out1 dbo.func1(code)), (SELECT out2 dbo.func1(code)) 
FROM MyInnerJoinedTablesResult 

Но моя дорого функция вызова на два с половиной раза, но я хочу, чтобы назвать это один раз для каждой выбранной записи в моей таблице ... и результат в два столбца в любой ряд (не двойные строки)

SELECT code, name, 
(out1 in func1), (out2 in func2) 
FROM MyInnerJoinedTablesResult 
+3

'ВЫБОР t.code, f.out1, f.out2 ИЗ dbo.table КАК т CROSS APPLY dbo.func1 (т .code) AS f' –

+0

Извините, я не могу понять, что вы пытаетесь выполнить. Возможно, какой-то образец поможет. – ericpap

+0

И убедитесь, что ваша функция, ориентированная на таблицу, является встроенной функцией, связанной с таблицей. Это означает, что в функции есть 1 и ТОЛЬКО 1 оператор. Если у вас есть переменные и всякая обработка, ваша производительность не будет лучше. –

ответ

1

Вы должны использовать Cross Apply

SELECT code, name, func.out1, func.out2 
FROM MyInnerJoinedTablesResult 
cross apply dbo.func1(code) as func 
Смежные вопросы