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

Roy*_*oys 33 sql sql-server stored-procedures

如何在SQL Server中的另一个存储过程中执行存储过程?我如何传递第二个程序的参数.

小智 43

如果您只想通过第二个SP执行某些特定操作,并且不需要从SP返回值,则只需执行以下操作:

Exec secondSPName  @anyparams
Run Code Online (Sandbox Code Playgroud)

否则,如果您需要第二个SP在第一个SP中返回的值,则创建一个临时表变量,其列数相等,并且第二个SP的列返回定义相同.然后,您可以在第一个SP中获取这些值:

Insert into @tep_table
Exec secondSPName @anyparams
Run Code Online (Sandbox Code Playgroud)

更新:

要将参数传递给第二个sp,请执行以下操作:

Declare @id ID_Column_datatype 
Set @id=(Select id from table_1 Where yourconditions)

Exec secondSPName @id
Run Code Online (Sandbox Code Playgroud)

更新2:

假设你的第二个SP的回报Id,并Name在那里的类型id就是intname是的varchar(64)类型.

现在,如果要在第一个sp中选择这些值,则创建一个临时table变量并将值插入其中:

Declare @tep_table table
(
  Id int,
  Name varchar(64)
)
Insert into @tep_table
Exec secondSP

Select * From @tep_table
Run Code Online (Sandbox Code Playgroud)

这将返回第二个SP返回的值.

希望,这清楚你所有的疑虑.


Sag*_*ara 5

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

第一个存储过程:

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
Run Code Online (Sandbox Code Playgroud)

现在,您希望从另一个存储过程调用此过程,如下所示

第二个存储过程

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
Run Code Online (Sandbox Code Playgroud)

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


mee*_*eer 1

您可以交替调用存储过程中的用户定义函数

这可以解决您调用存储过程的问题