Вызов хранимой процедуры из другой хранимой процедуры SQL Server - PullRequest
33 голосов
/ 14 января 2012

У меня есть 3 хранимых процедуры вставки, каждый SP вставляет данные в 2 разные таблицы

Table 1          Table 2                
idPerson         idProduct             
name             productName            
phoneNumber      productdescription     
FK-idProduct

СП для таблицы 1 СП для таблицы 2

create procedure test1                create procedure test2
WITH                                  WITH 
EXECUTE as caller                     EXECUTE as caller
AS                                    AS
declare                               declare

@idPerson int,                        @idProduct int,
@name varchar(20),                    @productName varchar(50),
@phone varchar(20)                    @productoDescription varchar(50)


  SET nocount on;                     SET nocount on;
    Begin                             Begin
      insert into table1(                insert into table2(
                idPerson,                          idProduct,
                name,                              productName,
                phone)                             productDescription)
          values(                            values(
                @idPerson,                         @idProduct,
                @name,                             @productName,
                @phone)                            @productDescription)
      end                               end

Мне нужно вызвать тест хранимой процедуры 2 из теста хранимой процедуры 1 и вставить FK-ID в таблицу 1

Ответы [ 3 ]

29 голосов
/ 14 января 2012

Просто позвоните test2 из test1, например:

EXEC test2 @newId, @prod, @desc;

Убедитесь, что набрали @id, используя:

SELECT @newId = @@SCOPE_IDENTITY
6 голосов
/ 14 января 2012

Вы можете добавить параметр OUTPUT в test2 и установить его для нового идентификатора сразу после INSERT, используя:

SELECT @NewIdOutputParam = SCOPE_IDENTITY()

Затем в test1 получить его следующим образом:

DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed
0 голосов
/ 16 октября 2015

Прежде всего, если idProduct table2 является идентификатором, вы не можете вставить его явно, пока не установите IDENTITY_INSERT для этой таблицы

SET IDENTITY_INSERT table2 ON;

перед вставкой.

Таким образом, один из двух, вы изменяете свой второй сохраненный и вызываете его только с параметрами productName и productDescription, а затем получаете новый идентификатор

EXEC test2 'productName', 'productDescription'
SET @newID = SCOPE_IDENTIY()

или у вас уже есть идентификатор продукта ивам не нужно звонить SCOPE_IDENTITY() и вы можете сделать вставку на table1 с этим идентификатором

...