SQL Serverの別のストアドプロシージャでストアドプロシージャを実行するにはどうすればよいですか? 2番目の手順のパラメーターをどのように渡しますか?
2番目のSPによって特定の操作のみを実行し、SPから返される値を必要としない場合は、次のようにします。
Exec secondSPName @anyparams
それ以外の場合、最初の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
を返し、id
のタイプがint
であり、name
がvarchar(64)
タイプであるとします。
ここで、最初の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
あなたの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;
...
ストアドプロシージャでユーザー定義関数を交互に呼び出すことができます
これにより、ストアドプロシージャを呼び出す問題が解決する場合があります
はい、ストアプロシージャ内で関数を呼び出すのは簡単です。
例えばユーザー定義年齢関数を作成し、選択クエリで使用します。
select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R