1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| USE [INNO_ADMIN]
GO
/****** Object: StoredProcedure [S_PROMO].[UP_PROMO_SAVE_DEMO] Script Date: 27/01/2015 17:08:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [S_PROMO].[UP_PROMO_SAVE_DEMO]
@PRM_ID INT,
@DETAILS_DEMO DETAILS_DEMO READONLY,
@BA_ID TINYINT,
@PRODUCTS PRODUCT_LIST READONLY,
@PCT_ID TINYINT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRAN
DECLARE @ERROR INT;
MERGE S_PROMO.T_DETAIL_DEMO_DTD AS TARGET
USING ( SELECT CONT_ID, DTD_PERCENT, DTD_DESC, DTD_NOTE
FROM @DETAILS_DEMO ) AS SOURCE(CONT_ID, DTD_PERCENT, DTD_DESC, DTD_NOTE)
ON TARGET.PRM_ID = @PRM_ID
AND TARGET.CONT_ID = SOURCE.CONT_ID
AND TARGET.DTD_PERCENT = SOURCE.DTD_PERCENT
WHEN MATCHED THEN
UPDATE SET DTD_PERCENT = SOURCE.DTD_PERCENT,
DTD_DESC = SOURCE.DTD_DESC,
DTD_NOTE = SOURCE.DTD_NOTE
WHEN NOT MATCHED THEN
INSERT(PRM_ID, CONT_ID, DTD_PERCENT, DTD_DESC, DTD_NOTE, BA_ID, PCT_ID)
VALUES(@PRM_ID, SOURCE.CONT_ID, SOURCE.DTD_PERCENT, SOURCE.DTD_DESC, SOURCE.DTD_NOTE, @BA_ID, @PCT_ID);
SET @ERROR = @ERROR + @@error;
MERGE S_PROMO.T_PRODUCT_LIST_DEMO_PLD AS TARGET
USING ( SELECT DTD.DTD_ID,
P.PLD_BARCODE,
P.PLD_INCLUSIVE,
P.PLD_COLOR,
P.PLD_SIZE,
P.PLD_DESC,
P.PLD_PRICE
FROM @PRODUCTS P
INNER JOIN S_PROMO.T_DETAIL_DEMO_DTD DTD
ON DTD.PRM_ID = @PRM_ID
AND DTD.CONT_ID = P.CONT_ID
AND DTD.DTD_PERCENT = P.DTD_PERCENT) AS SOURCE(DTD_ID, PLD_BARCODE, PLD_INCLUSIVE, PLD_COLOR, PLD_SIZE, PLD_DESC, PLD_PRICE)
ON TARGET.DTD_ID = SOURCE.DTD_ID
AND TARGET.PLD_BARCODE = SOURCE.PLD_BARCODE
WHEN MATCHED THEN
UPDATE SET PLD_INCLUSIVE = SOURCE.PLD_INCLUSIVE,
PLD_COLOR = SOURCE.PLD_COLOR,
PLD_SIZE = SOURCE.PLD_SIZE,
PLD_DESC = SOURCE.PLD_DESC,
PLD_PRICE = SOURCE.PLD_PRICE
WHEN NOT MATCHED THEN
INSERT(DTD_ID, PLD_BARCODE, PLD_INCLUSIVE, PLD_COLOR, PLD_SIZE, PLD_DESC, PLD_PRICE)
VALUES(SOURCE.DTD_ID, SOURCE.PLD_BARCODE, SOURCE.PLD_INCLUSIVE, SOURCE.PLD_COLOR, SOURCE.PLD_SIZE, SOURCE.PLD_DESC, SOURCE.PLD_PRICE);
SET @ERROR = @ERROR + @@error;
DELETE FROM S_PROMO.T_PRODUCT_LIST_DEMO_PLD
WHERE DTD_ID IN ( SELECT DTD.DTD_ID
FROM @PRODUCTS P
INNER JOIN S_PROMO.T_DETAIL_DEMO_DTD DTD
ON DTD.PRM_ID = @PRM_ID
AND DTD.CONT_ID = P.CONT_ID
AND DTD.DTD_PERCENT = P.DTD_PERCENT)
AND PLD_BARCODE NOT IN (SELECT PLD_BARCODE
FROM @PRODUCTS)
SET @ERROR = @ERROR + @@error;
IF @ERROR <> 0
BEGIN
DECLARE @MSG AS VARCHAR(1000) = 'ERROR DURING SAVING DETAILS DEMO';
RAISERROR(@MSG,16,1)
ROLLBACK TRAN
END
ELSE
COMMIT TRAN
END |
Partager