【问题标题】:Use stored procedure in Select query在 Select 查询中使用存储过程
【发布时间】:2012-12-15 21:06:05
【问题描述】:

我有一个想要在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 code=@userCode)
    UNION ALL SELECT d.code FROM Resseler d INNER JOIN Directories p ON  d.parent = p.code)
        SELECT  * FROM    Directories d

【问题讨论】:

  • 有什么理由不能代替函数吗?
  • 没有,但我不知道如何使用它并在谷歌中搜索并找到某物但出现错误,如果您可以通过功能解决此问题,请帮助
  • 您遇到的错误究竟是 WHAT 是什么?请发布完整、完整和准确的错误 - 谢谢

标签: sql sql-server tsql stored-procedures


【解决方案1】:

不支持从存储过程中直接选择。但是,这种类型的操作非常适合 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 code=@userCode)
       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));

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多