【问题标题】:Run one stored procedure within another stored procedure in SQL Server 2008在 SQL Server 2008 中的另一个存储过程中运行一个存储过程
【发布时间】:2014-01-07 13:23:17
【问题描述】:

我有一个名为 [usp_Movie_GetUserPaidList] 的存储过程,它接受两个参数 @MovieID INT, @UserName Nvarchar(250) 并返回类似这样的数据

Exec usp_Movie_GetUserPaidList @MovieID, @UserName

IsPaidUser   | IsSubscribeUser
   0                 0

现在在我的另一个存储过程中,我有类似

DECLARE @tblTemp1 TABLE (
        MovieID INT
        ,IsPaidUser BIT
        ,IsSubscribeUser BIT
        )

这里我知道@MovieID

现在我需要做类似的事情

INSERT INTO @tblTemp1
SELECT @MovieID (EXEC [usp_Movie_GetUserPaidList] @MovieID,@userName )

这显然是不正确的。

帮我这样做...感谢您的宝贵时间。

【问题讨论】:

    标签: sql database sql-server-2008 select stored-procedures


    【解决方案1】:

    您需要在另一个变量中获取输出,然后使用它:

     DECLARE @Movieid int
     EXEC @Movieid = [usp_Movie_GetUserPaidList] @MovieID,@userName
    

    这里的假设是: 1. 你有@MovieID 和@userName。 2. 您存储的过程 usp_Movie_GetUserPaidList 正在返回正确的值。

    【讨论】:

    • 是的,我知道 MovieID 和 UserName 的正确值。 EXEC [usp_Movie_GetUserPaidList] @MovieID,@UserName 将返回两个值。我必须将这些值与 MovieID 一起插入另一个表中
    • 存储过程只能返回一个值。如果你想要更多,那么你必须使用 OUT 参数。所以,修改你存储的 proc usp_Movie_GetUserPaidList 并添加两个 out 参数。从您的存储过程中调用它是相同的,但您还需要在“Exec”命令中传递 out 参数。
    • 如果我的表是DECLARE @tblTemp2 TABLE ( IsPaidUser BIT ,IsSubscribeUser BIT ),那么我可以使用INSERT INTO @tblTemp2 EXEC [usp_Movie_GetUserPaidList] @MovieID,@userName 轻松插入,但我还有一个字段要插入。谢谢你的建议。
    【解决方案2】:

    你为什么不在存储过程usp_Movie_GetUserPaidList 的输出中返回MovieID,因为你也知道它在那里。然后您可以在另一个存储过程中使用简单的插入,例如:

    INSERT INTO @tblTemp1
    EXEC [usp_Movie_GetUserPaidList] @MovieID,@userName 
    

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      相关资源
      最近更新 更多