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
Appelez simplement test2
à partir de test1
comme:
EXEC test2 @newId, @prod, @desc;
Assurez-vous d’obtenir @id
en utilisant:
SELECT @newId = @@SCOPE_IDENTITY
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
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