web-dev-qa-db-fra.com

Appel de procédure stockée à partir d'une autre procédure stockée SQL Server

J'ai 3 procédures stockées insérées chaque SP insère des données dans 2 tables différentes

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

SP pour le tableau 1 SP pour le tableau 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

Je dois appeler le test de procédure stockée 2 à partir du test de procédure stockée 1 et insérer le FK-ID dans le tableau 1

32
arturo r

Appelez simplement test2 à partir de test1 comme:

EXEC test2 @newId, @prod, @desc;

Assurez-vous d’obtenir @id en utilisant:

SELECT @newId = @@SCOPE_IDENTITY
26
Mark Kadlec

Vous pouvez ajouter un paramètre OUTPUT à test2 et le définir sur le nouvel ID immédiatement après INSERT en utilisant:

SELECT @NewIdOutputParam = SCOPE_IDENTITY()

Puis dans test1, récupérez-le comme ceci:

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

Tout d'abord, si idProduct de table2 est une identité, vous ne pouvez pas l'insérer explicitement tant que vous n'avez pas défini IDENTITY_INSERT sur cette table.

SET IDENTITY_INSERT table2 ON;

avant l'insertion.

Donc, l’un des deux, vous modifiez votre seconde stockée et vous l’appelez avec uniquement les paramètres productName et productDescription, puis vous obtenez le nouvel ID

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

ou vous avez déjà l'ID du produit et vous n'avez pas besoin d'appeler SCOPE_IDENTITY() et pouvez effectuer l'insertion sur table1 avec cet ID

0
Sergio Rosas