Подтвердить что ты не робот

Выполнение хранимой процедуры в другой хранимой процедуре на SQL-сервере

Как я могу выполнить хранимую процедуру в другой хранимой процедуре на SQL-сервере? Как передать параметры второй процедуры.?

4b9b3361

Ответ 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