Я написал довольно сложный запрос t-sql (по моим стандартам, поскольку я не администратор баз данных), в котором есть еще более сложный подзапрос, который я абстрагировал как скалярную функцию для вычисления и извлечения одного значения. , Все работало хорошо, пока я не понял, что мне нужны данные из второго столбца в подзапросе / функции, и теперь я застрял. Очевидно, что я могу преобразовать функцию в процедуру для возврата нескольких значений (или, альтернативно, объявить подзапрос непосредственно в основном запросе), но как я могу аккуратно передать их в родительский запрос выбора в виде отдельных столбцов?
Я знаю, что могу сделать несколько неуклюжих вещей, таких как объединение (разделение запятыми) результатов или использование FOR XML (который мой запрос включает для другого подзапроса, который возвращает данные * .. 1 из другой таблицы), но я используя Entity Framework и предпочел бы строго придерживаться этих двух конкретных значений. Мой Google продолжает прибегать к использованию EXISTS, но я не вижу ни одного примера, где столбцы фактически извлекаются из запроса select, т. Е. Он используется только для применения логики к предложению where с использованием нескольких столбцов.
Это просто то, что нельзя сделать? Мое последнее средство - попытаться объединить подзапрос в виде большего количества объединений, но я стараюсь, чтобы мой запрос был читабельным, и объединение их выбрасывает эту идею в окно.
Заранее спасибо - «Нет, этого нельзя сделать» - это тоже ответ, который я готов принять: -)
Вот "новый" пример, использующий скалярную функцию, которую я хочу изменить на сохраненный процесс, который возвращает 2 столбца:
SELECT t1.Field1,
t2.Field2,
,dbo.fn_Select_ComplexStuff(t1.Field3) AS ComplexStuff
FROM MyTable1 AS t1
INNER JOIN MyTable2 AS t2 ON t1.id = t2.id
WHERE t1.Field4 = 'Albatross'