t-sql select запрос с подзапросом / вызовом proc с 2 или более столбцами в подзапросе - PullRequest
1 голос
/ 27 апреля 2011

Я написал довольно сложный запрос 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'

1 Ответ

0 голосов
/ 27 апреля 2011

Вы должны преобразовать то, что у вас есть как скалярную функцию, в табличную функцию , а затем использовать оператор CROSS APPLY в предложении FROM для построения вашего окончательного набора результатов.

Вы не можете объединять хранимые процедуры в другие запросы, и единственный способ вернуть несколько значений (столбцов) из UDF - это его табличное значение (поэтому он возвращаетнабор результатов, а не одно скалярное значение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...