在 SQL Server 中的另一个存储过程中执行一个存储过程
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15802511/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Execute a stored procedure in another stored procedure in SQL server
提问by Roys
How can i execute a stored procedure in another stored procedure in SQL server? How will I pass the parameters of the second procedure.?
如何在 SQL Server 的另一个存储过程中执行一个存储过程?我将如何传递第二个过程的参数。?
回答by Ken Clark
If you only want to perform some specific operations by your second SP and do not require values back from the SP then simply do:
如果您只想通过第二个 SP 执行某些特定操作并且不需要从 SP 返回值,那么只需执行以下操作:
Exec secondSPName @anyparams
Else, if you need values returned by your second SP inside your first one, then create a temporary table variable with equal numbers of columns and with same definition of column return by second SP. Then you can get these values in first SP as:
否则,如果您需要第一个 SP 中的第二个 SP 返回的值,则创建一个具有相同列数和第二个 SP 返回的列定义相同的临时表变量。然后你可以在第一个 SP 中获得这些值:
Insert into @tep_table
Exec secondSPName @anyparams
Update:
更新:
To pass parameter to second sp, do this:
要将参数传递给第二个 sp,请执行以下操作:
Declare @id ID_Column_datatype
Set @id=(Select id from table_1 Where yourconditions)
Exec secondSPName @id
Update 2:
更新 2:
Suppose your second sp returns Id
and Name
where type of id
is int
and name
is of varchar(64)
type.
假设您的第二个 sp 返回Id
并且Name
其中类型id
是int
和name
是varchar(64)
类型。
now, if you want to select these values in first sp then create a temporary table
variable and insert values into it:
现在,如果要在第一个 sp 中选择这些值,则创建一个临时table
变量并将值插入其中:
Declare @tep_table table
(
Id int,
Name varchar(64)
)
Insert into @tep_table
Exec secondSP
Select * From @tep_table
This will return you the values returned by second SP.
这将返回第二个 SP 返回的值。
Hope, this clear all your doubts.
希望,这可以消除您所有的疑虑。
回答by Sagar Hirapara
Suppose you have one stored procedure like this
假设你有一个这样的存储过程
First stored procedure:
第一个存储过程:
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
Now you want to call this procedure from another stored procedure like as below
现在你想从另一个存储过程调用这个过程,如下所示
Second stored procedure
第二个存储过程
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
As you seen above, we can call one stored procedure from another
正如你在上面看到的,我们可以从另一个调用一个存储过程
回答by Vishal Suthar
Yes, you can do that like this:
是的,你可以这样做:
BEGIN
DECLARE @Results TABLE (Tid INT PRIMARY KEY);
INSERT @Results
EXEC Procedure2 [parameters];
SET @total 1;
END
SELECT @total
回答by meer
You can call User-defined Functions in a stored procedure alternately
您可以交替调用存储过程中的用户定义函数
this may solve your problem to call stored procedure
这可能会解决您调用存储过程的问题
回答by alditis
Your sp_test: Return fullname
你的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
In your sp_main
在你的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;
...
回答by Hrishikesh shivacharan
Yes , Its easy to way we call the function inside the store procedure.
是的,我们在存储过程中调用函数很容易。
for e.g. create user define Age function and use in select query.
例如,创建用户定义年龄函数并在选择查询中使用。
select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R
回答by Govinda Kudarpake
Procedure example:
程序示例:
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