web-dev-qa-db-de.com

Aufrufen der gespeicherten Prozedur von einer anderen gespeicherten Prozedur SQL Server

Ich habe 3 gespeicherte Einfügungsprozeduren SP fügt Daten in 2 verschiedene Tabellen ein

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

SP für Tabelle 1 SP für Tabelle 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

Ich muss Test 2 für gespeicherte Prozeduren von Test 1 für gespeicherte Prozeduren aufrufen und die FK-ID in die Tabelle 1 einfügen

32
arturo r

Rufen Sie einfach test2 von test1 auf:

EXEC test2 @newId, @prod, @desc;

Stellen Sie sicher, dass Sie @id verwenden:

SELECT @newId = @@SCOPE_IDENTITY
26
Mark Kadlec

Sie können test2 einen OUTPUT-Parameter hinzufügen und ihn direkt nach dem INSERT auf die neue ID setzen.

SELECT @NewIdOutputParam = SCOPE_IDENTITY()

Dann rufen Sie es in test1 so ab:

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

Wenn table2s idProduct eine Identität ist, können Sie es erst dann explizit einfügen, wenn Sie IDENTITY_INSERT für diese Tabelle festgelegt haben

SET IDENTITY_INSERT table2 ON;

vor dem Einsatz.

Also eine von zwei, Sie ändern Ihre zweite gespeicherte und rufen sie nur mit den Parametern productName und productDescription auf und erhalten dann die neue ID

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

oder Sie haben bereits die ID des Produkts und müssen nicht SCOPE_IDENTITY() aufrufen. Sie können die Einfügung auf table1 mit dieser ID vornehmen

0
Sergio Rosas