SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Alexander Toufexis -- Create date: 24/05/2019 -- Description: Copy prices from one pricelist, to another, if no price is already set in the 2nd pricelist. -- ============================================= ALTER PROCEDURE [dbo].[_as_UpdateItemSegmentValue] -- Add the parameters for the stored procedure here @ItemCode as varchar(50) = NULL, @SimpleCode as varchar(50) = NULL, @StockLink bigint = 0, @SegmentName as varchar(50), @NewSegmentValue as varchar(50) AS BEGIN /* USAGE: --Item code based: EXEC [_as_UpdateItemSegmentValue] '1001/FIN/IND/CEL/RET/BAG',NULL,NULL,'Customer Grouping','SPA'; --FIN/SPA/CEL/RET/BAG EXEC [_as_UpdateItemSegmentValue] 'FIN/SPA/CEL/RET/BAG',NULL,NULL,'Customer Grouping','IND'; --FIN/SPA/CEL/RET/BAG EXEC [_as_UpdateItemSegmentValue] NULL,NULL,328,'Customer Grouping','IND'; --FIN/SPA/CEL/RET/BAG --Simple Code based: EXEC [_as_UpdateItemSegmentValue] NULL,'1001',NULL,'Customer Grouping','IND'; --should fail due to duplicate simple code: 20040 EXEC [_as_UpdateItemSegmentValue] NULL,'20040',NULL,'Customer Grouping','IND'; --check: select top 10 StockLink, Code, cSimpleCode, cExtDescription from _bvStockFull where StockLink = 328 -- Code = '1001/FIN/SPA/CEL/RET/BAG' */ /*DEBUG SELECTS: SELECT * FROM sys.tables order by name select * from _etblInvSegType select * from _etblInvSegValue select top 10 * from StkItem select top 10 * from _bvStockFull SELECT * FROM sys.tables where name like '%seg%' order by name */ DECLARE @SegGroupID int SELECT @SegGroupID = COALESCE((SELECT idInvSegType FROM _etblInvSegType T WHERE T.cDescription = @SegmentName),0) --getting the right stock item: --DECLARE @StockLink bigint IF (COALESCE(@ItemCode,'') <> '') BEGIN SELECT @StockLink = COALESCE((SELECT StockLink FROM StkItem WHERE Code = @ItemCode),0) END ELSE IF (COALESCE(@SimpleCode,'') <> '') BEGIN IF EXISTS (select cSimpleCode, count(*) from _bvStockFull group by cSimpleCode having count(*) > 1) BEGIN RaisError('Simple code %s is not unique!',17,1, @SimpleCode) RETURN -1 END ELSE BEGIN SELECT @StockLink = COALESCE((SELECT StockLink FROM StkItem WHERE cSimpleCode = @SimpleCode),0) END END --check if segment group exists. if not, early out with error. IF (@SegGroupID = 0) BEGIN RaisError('Segment Group %s not found!',17,1, @SegmentName) RETURN -1 END IF (@StockLink = 0) BEGIN RaisError('Stock Code %s not found!',17,1, @ItemCode) RETURN -1 END PRINT 'about to lookup seg value id' PRINT @SegGroupID; DECLARE @SegValueID int /*also handling blank values, to set to 0*/ IF (@NewSegmentValue = '') BEGIN PRINT 'Setting segment ID to 0 for a blank value'; SELECT @SegValueID = 0 END ELSE BEGIN SELECT @SegValueID = COALESCE((SELECT TOP 1 idInvSegValue FROM _etblInvSegValue WHERE cValue = @NewSegmentValue AND iInvSegGroupID = @SegGroupID),0) --select * from _etblInvSegValue WHERE cValue = 'IND' AND iInvSegGroupID = 2 IF (@SegValueID = 0) BEGIN RaisError('New segment value %s not found!',17,1, @NewSegmentValue) RETURN -1 END END --IF (@NewSegmentValue = '') PRINT 'about to update stkitem' --all good, let's update: UPDATE StkItem SET iInvSegValue1ID = CASE WHEN @SegGroupID = 1 THEN @SegValueID ELSE iInvSegValue1ID END ,iInvSegValue2ID = CASE WHEN @SegGroupID = 2 THEN @SegValueID ELSE iInvSegValue2ID END ,iInvSegValue3ID = CASE WHEN @SegGroupID = 3 THEN @SegValueID ELSE iInvSegValue3ID END ,iInvSegValue4ID = CASE WHEN @SegGroupID = 4 THEN @SegValueID ELSE iInvSegValue4ID END ,iInvSegValue5ID = CASE WHEN @SegGroupID = 5 THEN @SegValueID ELSE iInvSegValue5ID END ,iInvSegValue6ID = CASE WHEN @SegGroupID = 6 THEN @SegValueID ELSE iInvSegValue6ID END ,iInvSegValue7ID = CASE WHEN @SegGroupID = 7 THEN @SegValueID ELSE iInvSegValue7ID END WHERE StockLink = @StockLink UPDATE _bvStockFull SET Code = cSimpleCode + CASE WHEN iInvSegValue1ID = 0 THEN '' ELSE '/' + cInvSegValue1Value END + CASE WHEN iInvSegValue2ID = 0 THEN '' ELSE '/' + cInvSegValue2Value END + CASE WHEN iInvSegValue3ID = 0 THEN '' ELSE '/' + cInvSegValue3Value END + CASE WHEN iInvSegValue4ID = 0 THEN '' ELSE '/' + cInvSegValue4Value END + CASE WHEN iInvSegValue5ID = 0 THEN '' ELSE '/' + cInvSegValue5Value END + CASE WHEN iInvSegValue6ID = 0 THEN '' ELSE '/' + cInvSegValue6Value END + CASE WHEN iInvSegValue7ID = 0 THEN '' ELSE '/' + cInvSegValue7Value END ,cExtDescription = Description_1 + CASE WHEN iInvSegValue1ID = 0 THEN '' ELSE '/' + cInvSegValue1Desc END + CASE WHEN iInvSegValue2ID = 0 THEN '' ELSE '/' + cInvSegValue2Desc END + CASE WHEN iInvSegValue3ID = 0 THEN '' ELSE '/' + cInvSegValue3Desc END + CASE WHEN iInvSegValue4ID = 0 THEN '' ELSE '/' + cInvSegValue4Desc END + CASE WHEN iInvSegValue5ID = 0 THEN '' ELSE '/' + cInvSegValue5Desc END + CASE WHEN iInvSegValue6ID = 0 THEN '' ELSE '/' + cInvSegValue6Desc END + CASE WHEN iInvSegValue7ID = 0 THEN '' ELSE '/' + cInvSegValue7Desc END WHERE StockLink = @StockLink END