Как я могу выполнить хранимую процедуру в другой хранимой процедуре на SQL-сервере? Как передать параметры второй процедуры.?
Выполнение хранимой процедуры в другой хранимой процедуре на SQL-сервере
Ответ 1
Если вы хотите выполнить некоторые определенные операции по своему второму SP и не требовать значений обратно от SP, просто выполните:
Exec secondSPName @anyparams
Иначе, если вам нужны значения, возвращаемые вашим вторым SP внутри вашего первого, затем создайте временную переменную таблицы с равным количеством столбцов и с тем же определением возврата столбца вторым SP. Затем вы можете получить эти значения в первом SP как:
Insert into @tep_table
Exec secondSPName @anyparams
Update:
Чтобы передать параметр во второй sp, сделайте следующее:
Declare @id ID_Column_datatype
Set @id=(Select id from table_1 Where yourconditions)
Exec secondSPName @id
Обновление 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
Это вернет вам значения, возвращаемые вторым SP.
Надеюсь, это ясно все ваши сомнения.
Ответ 2
Предположим, что у вас есть одна хранимая процедура, подобная этой
Первая хранимая процедура:
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
Как вы видели выше, мы можем вызвать одну хранимую процедуру из другого
Ответ 3
Да, вы можете сделать это вот так:
BEGIN
DECLARE @Results TABLE (Tid INT PRIMARY KEY);
INSERT @Results
EXEC Procedure2 [parameters];
SET @total 1;
END
SELECT @total
Ответ 4
Вы можете вызывать пользовательские функции в хранимой процедуре поочередно
это может решить вашу проблему, чтобы вызвать хранимую процедуру
Ответ 5
Ваш 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;
...
Ответ 6
Да, Его простой способ мы называем функцию внутри процедуры хранения.
например. создайте пользователя, определите функцию Возраста и используйте в выбранном запросе.
выберите dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) как Age, R.DateOfBirth, r.RegistrationDate из T_Registration R