SQL サーバーの別のストアド プロシージャでストアド プロシージャを実行するにはどうすればよいですか? 2 番目のプロシージャのパラメーターを渡すにはどうすればよいですか?
7 に答える
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
れ、Name
where type of id
isint
およびname
is 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 によって返された値が返されます。
希望、これですべての疑問が解消されます。
このようなストアド プロシージャが 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
上記のように、あるストアド プロシージャを別のストアド プロシージャから呼び出すことができます。
はい、次のようにできます。
BEGIN
DECLARE @Results TABLE (Tid INT PRIMARY KEY);
INSERT @Results
EXEC Procedure2 [parameters];
SET @total 1;
END
SELECT @total
ストアド プロシージャでユーザー定義関数を代わりに呼び出すことができます
これにより、ストアドプロシージャを呼び出す問題が解決する場合があります