如何在SQL Server中执行另一个存储过程?如何传递第二个存储过程的参数?
如何在SQL Server中执行另一个存储过程?如何传递第二个存储过程的参数?
如果您只想通过第二个存储过程执行特定操作,并且不需要从存储过程返回值,则可以简单地执行:
Exec secondSPName @anyparams
否则,如果你需要在第一个存储过程中返回第二个存储过程的值,那么请创建一个临时表变量,该变量包含与第二个存储过程返回列相同数量和定义的列。然后你可以在第一个存储过程中获取这些值:
Insert into @tep_table
Exec secondSPName @anyparams
更新:
要向第二个存储过程传递参数,请按照以下步骤操作:
Declare @id ID_Column_datatype
Set @id=(Select id from table_1 Where yourconditions)
Exec secondSPName @id
更新2:
假设你的第二个存储过程返回Id
和Name
,其中id
的类型是int
,而name
的类型是varchar(64)
。
现在,如果你想在第一个存储过程中选择这些值,则需要创建一个临时的table
变量并将值插入其中:
Declare @tep_table table
(
Id int,
Name varchar(64)
)
Insert into @tep_table
Exec secondSP
Select * From @tep_table
这将返回第二个SP返回的值。
希望这样能清楚解决您所有疑问。
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
正如您在上面看到的,我们可以从另一个存储过程调用一个存储过程。
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
...
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;
...
是的,你可以这样做:
BEGIN
DECLARE @Results TABLE (Tid INT PRIMARY KEY);
INSERT @Results
EXEC Procedure2 [parameters];
SET @total 1;
END
SELECT @total
您可以在存储过程中调用用户定义的函数,这可能会解决您调用存储过程的问题。
是的,我们可以很容易地在存储过程中调用函数。
例如,创建用户定义的年龄函数并在选择查询中使用。
select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R
过程示例:
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
exec
关键字。 - Matthew