TR_BANKACCOUNT_ACCOUNTCODE_ISUNIQUE

Definition

Copy


CREATE trigger dbo.TR_BANKACCOUNT_ACCOUNTCODE_ISUNIQUE on BANKACCOUNT for INSERT, UPDATE not for replication as
begin
  set nocount on;

    exec USP_GET_KEY_ACCESS;
  DECLARE @type CHAR(1);-- 'U' for update, 'I' for insert

  IF EXISTS(SELECT * FROM inserted)
   BEGIN
    IF EXISTS(SELECT * FROM deleted)
     BEGIN
      SET @type ='U';
     END
    ELSE
     BEGIN
      SET @type ='I';
     END
   END
    if exists(
        select I.ID
        from INSERTED I
        inner join dbo.BANKACCOUNT BA
            on BA.ID <> I.ID and
            convert(nvarchar(50), DecryptByKey(BA.ACCOUNTNUMBER)) = convert(nvarchar(50), DecryptByKey(I.ACCOUNTNUMBER))
        where BA.BANKID = I.BANKID and I.STATUSCODE = CASE @type WHEN 'U' THEN I.STATUSCODE WHEN 'I' THEN 1 END  and BA.STATUSCODE = 1
        )
    BEGIN
    RAISERROR ('UIX_BANKACCOUNT_BANKID_ACCOUNTNUMBER', 16, 1)
    ROLLBACK
  END

  declare @SEGMENT integer
  select @SEGMENT = SEQUENCE from dbo.PDACCOUNTSTRUCTURE where SEGMENTTYPE = 1
  if exists(
    SELECT I.ID
    FROM INSERTED I
    INNER JOIN dbo.GLACCOUNT A on A.ID = I.GLACCOUNTID
    WHERE dbo.UFN_GLACCOUNT_SEGMENTVALUES2(A.ACCOUNTNUMBER, @SEGMENT,I.PDACCOUNTSYSTEMID) IN 
      (SELECT S.SHORTDESCRIPTION
       FROM dbo.PDACCOUNTSEGMENTVALUE S
       INNER JOIN dbo.BANKACCOUNT B on B.PDACCOUNTSEGMENTVALUEID = S.ID
       and B.PDACCOUNTSYSTEMID = I.PDACCOUNTSYSTEMID
       WHERE B.STATUSCODE = 1)
        and I.STATUSCODE = CASE @type WHEN 'U' THEN I.STATUSCODE WHEN 'I' THEN 1 END
  )
  BEGIN
    RAISERROR ('UIX_BANKACCOUNT_GLACCOUNTID', 16, 1)
    ROLLBACK
  END

  if exists(
    SELECT I.ID
    FROM INSERTED I
    INNER JOIN dbo.BANKACCOUNT B on B.ID <> I.ID and B.GLACCOUNTID = I.GLACCOUNTID
    where B.STATUSCODE = 1 and B.GLACCOUNTID is not null and I.STATUSCODE = CASE @type WHEN 'U' THEN I.STATUSCODE WHEN 'I' THEN 1 END
  )
  BEGIN
    RAISERROR ('UIX_BANKACCOUNT_GLACCOUNTID', 16, 1)
    ROLLBACK
  END

  if exists(
    SELECT I.ID
    FROM INSERTED I
    INNER JOIN dbo.PDACCOUNTSEGMENTVALUE V ON I.PDACCOUNTSEGMENTVALUEID = V.ID
    WHERE V.SHORTDESCRIPTION IN
      (SELECT dbo.UFN_GLACCOUNT_SEGMENTVALUES2(A.ACCOUNTNUMBER, @SEGMENT,I.PDACCOUNTSYSTEMID)
       FROM dbo.GLACCOUNT A
       INNER JOIN dbo.BANKACCOUNT B ON B.GLACCOUNTID = A.ID
       WHERE B.STATUSCODE = 1 and B.PDACCOUNTSYSTEMID = I.PDACCOUNTSYSTEMID )
        and I.STATUSCODE = CASE @type WHEN 'U' THEN I.STATUSCODE WHEN 'I' THEN 1 END
  )
  BEGIN
    RAISERROR ('UIX_BANKACCOUNT_PDACCOUNTSEGMENTVALUEID', 16, 1)
    ROLLBACK
  END

  if exists(
    SELECT I.ID
    FROM INSERTED I
    INNER JOIN dbo.BANKACCOUNT B on B.ID <> I.ID and B.PDACCOUNTSEGMENTVALUEID = I.PDACCOUNTSEGMENTVALUEID
    WHERE B.STATUSCODE = 1 and B.PDACCOUNTSEGMENTVALUEID is not null and I.STATUSCODE = CASE @type WHEN 'U' THEN I.STATUSCODE WHEN 'I' THEN 1 END
  )
  BEGIN
    RAISERROR ('UIX_BANKACCOUNT_PDACCOUNTSEGMENTVALUEID', 16, 1)
    ROLLBACK
  END
end