Roy*_*oys 33 sql sql-server stored-procedures
如何在SQL Server中的另一个存储过程中执行存储过程?我如何传递第二个程序的参数.
小智 43
如果您只想通过第二个SP执行某些特定操作,并且不需要从SP返回值,则只需执行以下操作:
Exec secondSPName @anyparams
Run Code Online (Sandbox Code Playgroud)
否则,如果您需要第二个SP在第一个SP中返回的值,则创建一个临时表变量,其列数相等,并且第二个SP的列返回定义相同.然后,您可以在第一个SP中获取这些值:
Insert into @tep_table
Exec secondSPName @anyparams
Run Code Online (Sandbox Code Playgroud)
更新:
要将参数传递给第二个sp,请执行以下操作:
Declare @id ID_Column_datatype
Set @id=(Select id from table_1 Where yourconditions)
Exec secondSPName @id
Run Code Online (Sandbox Code Playgroud)
更新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
Run Code Online (Sandbox Code Playgroud)
这将返回第二个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
Run Code Online (Sandbox Code Playgroud)
现在,您希望从另一个存储过程调用此过程,如下所示
第二个存储过程
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
Run Code Online (Sandbox Code Playgroud)
如上所示,我们可以从另一个调用一个存储过程
归档时间: |
|
查看次数: |
156459 次 |
最近记录: |