如何在SQL Server中的另一个存储过程中执行存储过程

11

我正在使用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 的输出存储在一个变量中。我想那样就可以了。 - Prahalad Gaggar
请展示名为 "usp_Insert_Update_Details" 的代码。 - Ram Singh
1个回答

25

试一试

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

第一个存储过程:

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

如上所示,我们可以从另一个存储过程中调用一个存储过程。


3
请问如果 exec @EmpLoginid= LoginId @UserName,@Password 有输出参数怎么办? - sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接