38

SQL サーバーの別のストアド プロシージャでストアド プロシージャを実行するにはどうすればよいですか? 2 番目のプロシージャのパラメーターを渡すにはどうすればよいですか?

4

7 に答える 7

44

2 番目の SP で特定の操作を実行するだけで、SP から値を返す必要がない場合は、次のようにします。

Exec secondSPName  @anyparams

それ以外の場合、最初の SP 内で 2 番目の SP によって返される値が必要な場合は、同じ数の列を持ち、2 番目の SP によって返される列の定義が同じ一時テーブル変数を作成します。次に、最初の SP でこれらの値を次のように取得できます。

Insert into @tep_table
Exec secondSPName @anyparams

アップデート:

パラメータを 2 番目の sp に渡すには、次のようにします。

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

Exec secondSPName @id

更新 2:

2 番目の sp が返さIdれ、Namewhere type of idisintおよびnameis 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

これにより、2 番目の SP によって返された値が返されます。

希望、これですべての疑問が解消されます。

于 2013-04-04T04:42:47.640 に答える
8

このようなストアド プロシージャが 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

次に、以下のような別のストアド プロシージャからこのプロシージャを呼び出します。

2 番目のストアド プロシージャ

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 に答える