如何在sql server的另一个存储过程中执行存储过程

Posted

技术标签:

【中文标题】如何在sql server的另一个存储过程中执行存储过程【英文标题】:How to execute stored procedure in another stored procedure in sql server 【发布时间】:2013-04-25 09:27:04 【问题描述】:

我正在使用 sql server 2008。

我有一个存储过程,我正在其中执行另一个 usp。

这里我想获取第二个usp的输出并相应地返回主要的usp输出参数。

但是我的主usp总是返回带有主usp值的第二个usp值。

但我只想返回主要的 usp 值。

以下是我的程序:

ALTER Proc [dbo].[usp_ChangeStatus](@id int,@Status int,@Name varchar(300),@Success int output  )
as
set @Success=0
begin try   

if exists(Select * from tbl_abc where id= @id)
Begin               

    if(@Status =1)
    begin
        ----Try-Catch block----
        begin try               
            declare @AddHostStatus as int
            set @AddHostStatus=0                
                            exec @AddHostStatus =usp_xyz @Name,0,@Address       
            if(@AddHostStatus=-3)               
            begin
            set @Success=1
            end             
        end try
        begin catch
            set @Success=0
        end catch
        ----End-Try-Catch block----     
    end     
    if(@Success=1)
    begin               
    --do something here         
    end                 
 End 
        end try 
        begin catch 
    set @Success=0  
     end catch
        select  @Success

【问题讨论】:

将您正在执行的 Sp 的输出存储在一个变量中。我认为这可以解决问题。 请显示“usp_Insert_Update_Details”的代码 Executing a stored procedure within a stored procedure 的可能重复项 【参考方案1】:

试试这个

假设你有一个这样的存储过程

第一个存储过程:

Create  PROCEDURE LoginId
     @UserName nvarchar(200),
     @Password nvarchar(200)
AS
BEGIN
    DECLARE  @loginID  int

    SELECT @loginID = LoginId 
    FROM UserLogin 
    WHERE UserName = @UserName AND Password = @Password

    return @loginID
END

现在你想从另一个存储过程中调用这个过程,如下所示

第二个存储过程

Create  PROCEDURE Emprecord
         @UserName nvarchar(200),
         @Password nvarchar(200),
         @Email nvarchar(200),
         @IsAdmin bit,
         @EmpName nvarchar(200),
         @EmpLastName nvarchar(200),
         @EmpAddress nvarchar(200),
         @EmpContactNo nvarchar(150),
         @EmpCompanyName nvarchar(200)

    AS
    BEGIN
        INSERT INTO UserLogin VALUES(@UserName,@Password,@Email,@IsAdmin)

        DECLARE @EmpLoginid int

        exec @EmpLoginid= LoginId @UserName,@Password

        INSERT INTO tblEmployee VALUES(@EmpName,@EmpLastName,@EmpAddress,@EmpContactNo,@EmpCompanyName,@EmpLoginid)
    END

正如您在上面看到的,我们可以从另一个存储过程调用一个存储过程

【讨论】:

如果exec @EmpLoginid= LoginId @UserName,@Password有out参数怎么办?

以上是关于如何在sql server的另一个存储过程中执行存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sql Server 的另一个过程中使用一个过程的结果?

如何在 SQL Developer 中执行 SQL Server 存储过程?

如何在SQL Developer中执行SQL Server存储过程?

sql server:如何设置自动执行的存储过程?

在 ASP.NET MVC 中执行 SQL Server 存储过程时如何防止超时错误?

如何在 SQL Server 的 clr 存储过程中执行动态 .net 代码