38

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

4

7 回答 7

44

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

Exec secondSPName  @anyparams

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

Insert into @tep_table
Exec secondSPName @anyparams

更新:

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

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

Exec secondSPName @id

更新 2:

假设您的第二个 sp 返回Id并且Nametype of idisintnameis of varchar(64)type 的位置。

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

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

Select * From @tep_table

这将为您返回第二个 SP 返回的值。

希望,这消除了你所有的疑虑。

于 2013-04-04T04:42:47.640 回答
8

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

第一个存储过程:

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

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

于 2013-04-04T04:50:56.107 回答
2

是的,你可以这样做:

BEGIN
   DECLARE @Results TABLE (Tid INT PRIMARY KEY);

   INSERT @Results

   EXEC Procedure2 [parameters];
   SET @total 1;

END
SELECT @total
于 2013-04-04T04:37:39.930 回答
1

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

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

于 2013-04-04T04:33:59.967 回答
0

你的sp_test:返回全名

USE [MY_DB]
GO

IF (OBJECT_ID('[dbo].[sp_test]', 'P') IS NOT NULL)
DROP PROCEDURE [dbo].sp_test;
GO

CREATE PROCEDURE [dbo].sp_test 
@name VARCHAR(20),
@last_name VARCHAR(30),
@full_name VARCHAR(50) OUTPUT
AS

SET @full_name = @name + @last_name;

GO

在你的sp_main

...
DECLARE @my_name VARCHAR(20);
DECLARE @my_last_name VARCHAR(30);
DECLARE @my_full_name VARCHAR(50);
...

EXEC sp_test @my_name, @my_last_name, @my_full_name OUTPUT;
...
于 2015-01-08T19:07:38.240 回答
0

是的,我们在存储过程中调用函数很容易。

例如,创建用户定义年龄函数并在选择查询中使用。

select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R
于 2015-05-04T05:54:43.610 回答
-1

程序示例:

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

    --Statements for this Store Proc
  --
  -- 
  --

  --execute second store procedure
  --below line calling sencond Store Procedure Exec is used for execute Store Procedure.
    **Exec SP_Name_2 @params** (if any) 


END
于 2018-12-28T12:14:20.323 回答