USP_MARKINGCOLUMN_MOVE

Moves a marking column within the marking column set.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@SEQUENCECHANGE int IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_MARKINGCOLUMN_MOVE
    (
        @ID uniqueidentifier,
        @SEQUENCECHANGE int = 1,
        @CHANGEAGENTID uniqueidentifier = null
    )
as
begin
    -- See if we are making any change at all

    if (@SEQUENCECHANGE <> 0)
    begin
        -- Get the original sequence for the item

        declare @ORGSEQUENCE int;
        declare @MCSETID uniqueidentifier;

        select 
            @ORGSEQUENCE = SEQUENCE,
            @MCSETID = MARKINGCOLUMNSETID 
        from dbo.MARKINGCOLUMN 
        where ID = @ID;


    -- get the next higher/lower item's SEQUENCE

    declare @SWAPSEQUENCE int;
    select 
        @SWAPSEQUENCE = case when @SEQUENCECHANGE < 0 then max(SEQUENCE) else min(SEQUENCE) end
    from  dbo.MARKINGCOLUMN 
    where 
        MARKINGCOLUMNSETID = @MCSETID and 
        ((@SEQUENCECHANGE > 0 and SEQUENCE > @ORGSEQUENCE
            or (@SEQUENCECHANGE < 0 and SEQUENCE < @ORGSEQUENCE))


    if @SWAPSEQUENCE is not null
        -- handle both in single update due to possible uniqueness constraints

        update dbo.MARKINGCOLUMN
            set SEQUENCE = 
                case when ID = @ID 
                    then @SWAPSEQUENCE 
                    else @ORGSEQUENCE 
                end,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = getdate()
        where
            MARKINGCOLUMNSETID = @MCSETID and SEQUENCE in (@ORGSEQUENCE, @SWAPSEQUENCE)

    end

    return 0;
end