0
Je dois ajouter plusieurs lignes dans une table à la fois. Ces lignes ont des valeurs de champs communes. J'ai résolu mon problème en utilisant un curseur et c'est le proc stocké.Ajout conditionnel de plusieurs lignes (SQL SERVER 2008)
Est-ce que quelqu'un a une meilleure façon de le faire?
USE [MyDataBase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spAddDetailsBatch]
(
@IdOperTur UniqueIdentifier,
@IdProd UniqueIdentifier,
@Model Bit,
@PrAd Decimal(18,2),
@PrMe Decimal(18,2),
@PoCo Decimal(5,2)
)
AS
DECLARE @prpr_Id UniqueIdentifier
DECLARE @IdCont UniqueIdentifier = NULL
DECLARE CPr CURSOR FOR SELECT prpr_Id FROM trsx_PrPr WHERE (prod_Id = @IdProd)
OPEN CPr
FETCH NEXT FROM CPr INTO @prpr_Id
WHILE @@Fetch_Status=0 BEGIN /*iterate through all records from cursor*/
SET @IdCont = (SELECT cont_Id FROM trsx_Cont
WHERE (prpr_Id = @prpr_Id) AND (optu_Id = @IdOperTur))
IF @IdCont IS NULL
BEGIN
INSERT INTO trsx_Cont(cont_Id, prpr_Id, optu_Id, cont_Neto, cont_PrAd, cont_PrMe, cont_PoCo)
VALUES (NEWID(), @prpr_Id, @IdOperTur, @Model, @PrAd, @PrMe, @PoCo)
END
FETCH NEXT FROM CPr INTO @prpr_Id
END
CLOSE CPr
DEALLOCATE CPr
RETURN
Merci beaucoup.
Ouah !!!! Tout d'abord, ça a marché !!! MERCI BEAUCOUP. –
Ouah !!!! Tout d'abord, ça a marché !!! MERCI BEAUCOUP. Juste quelques commentaires: Quand j'ai vu votre code, j'ai pensé qu'il ne va pas parcourir, évidemment, j'avais tort. J'ai dû supprimer the() dans la clause SELECT à cause de la syntaxe et des erreurs de liaison. Merci encore. –
Pas de problème, content de pouvoir aider. :) –