2012-12-15 6 views
4

У меня есть хранимая процедура, которую я хочу использовать в SELECT, как показано ниже, но я получаю сообщение об ошибке.Использование хранимой процедуры в запросе выбора

выход хранимая процедура представляет собой таблицу с одним столбцом типа int

select * from users where resCode in (EXEC getUserResselers 1) 

-- stored procedure 
create procedure getUserResselers 
    @userCode int 
as 
    ;WITH Directories AS (SELECT code FROM Resseler WHERE code =(select resselerCode from Users where [email protected]) 
    UNION ALL SELECT d.code FROM Resseler d INNER JOIN Directories p ON d.parent = p.code) 
     SELECT * FROM Directories d 
+0

какой-либо причине не может быть вместо этого? –

+0

нет, но я не знаю, как его использовать и искать в google и найти sth, но произошла ошибка, если вы можете решить эту проблему с помощью функции, пожалуйста, помогите –

+0

И точно ** ЧТО ** это ошибка, которую вы получаете? Пожалуйста, напишите полную, полную и точную ошибку - спасибо –

ответ

2

Прямой выбор из хранимой процедуры не поддерживается. Однако этот тип операции является хорошим кандидатом для table-valued user-defined function, который может выглядеть примерно так:

Обратите внимание, что у вас есть ошибочные «реселлеры». Я оставил орфографию, чтобы вы могли протестировать свою существующую схему.

CREATE FUNCTION getUserResselers 
(
    @UserCode INT 
) 
RETURNS TABLE AS 
RETURN(
    WITH Directories AS (

     SELECT code FROM Reseller WHERE code = (select resselerCode from Users where [email protected]) 
     UNION ALL SELECT d.code FROM Resseler d INNER JOIN Directories p ON d.parent = p.code 
    ) 
    SELECT * FROM Directories 
) 

Вы тогда могли бы включать в себя присоединиться к функции в запросе, или вы можете продолжать использовать IN, что должно быть что-то вроде:

select * from users where resCode in (SELECT Code FROM getUserResselers(1)); 
Смежные вопросы