TR_CATEGORYDEFINITION_INSUPD_VALIDATE

Definition

Copy


CREATE trigger TR_CATEGORYDEFINITION_INSUPD_VALIDATE
on dbo.CATEGORYDEFINITION for insert, update
as
-- Check for overlapping categories

if update(TOCODE) or update(FROMCODE)
begin
  declare @COUNT int;
  begin try;
    with CTE (ID, FROMCODE, TOCODE)
    as (
    select
      coalesce(inserted.ID, CD.ID) as ID,
      coalesce(inserted.FROMCODE, CD.FROMCODE) as FROMCODE,
      coalesce(inserted.TOCODE, CD.TOCODE) as TOCODE
    from dbo.CATEGORYDEFINITION CD
    full outer join inserted on CD.ID = inserted.ID
    )
    select
      @COUNT = count(1)
    from
      inserted t1 inner join CTE t2
      on t1.ID != t2.ID and
      convert(bigint,nullif(t1.FROMCODE,'')) <= convert(bigint,nullif(t2.TOCODE,'')) and 
      convert(bigint,nullif(t1.TOCODE,'')) >= convert(bigint,nullif(t2.FROMCODE,''))
    ;
    if @COUNT > 0
      raiserror('ERR_CATEGORYDEFINITION_OVERLAP',13,1);
  end try
  begin catch
    exec dbo.USP_RAISE_ERROR;
  end catch
end