web-dev-qa-db-ja.com

別のストアドプロシージャSQL Serverからストアドプロシージャを呼び出す

3つの挿入ストアドプロシージャがありますSP 2つの異なるテーブルにデータを挿入します

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

表1のSP SP

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

ストアドプロシージャテスト1からストアドプロシージャテスト2を呼び出して、テーブル1にFK-IDを挿入する必要があります。

33
arturo r

単にtest2 from test1 好む:

EXEC test2 @newId, @prod, @desc;

@id使用:

SELECT @newId = @@SCOPE_IDENTITY
29
Mark Kadlec

OUTPUTパラメーターをtest2に追加し、INSERTの直後に新しいIDに設定できます:

SELECT @NewIdOutputParam = SCOPE_IDENTITY()

次に、test1で次のように取得します。

DECLARE @NewId INTEGER
EXECUTE test2 @NewId OUTPUT
-- Now use @NewId as needed
6
AdaTheDev

まず、_table2_のidProductがIDである場合、そのテーブルに_IDENTITY_INSERT_を設定するまで明示的に挿入することはできません

_SET IDENTITY_INSERT table2 ON;
_

挿入前。

したがって、2つのうちの1つは、2番目に格納されたものを変更し、パラメータproductNameおよびproductDescriptionのみで呼び出してから、新しいIDを取得します。

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

または、すでに製品のIDがあり、SCOPE_IDENTITY()を呼び出す必要はなく、そのIDで_table1_に挿入できます

0
Sergio Rosas