TR_PDACCOUNTSTRUCTURE_INS
Definition
Copy
CREATE trigger [dbo].[TR_PDACCOUNTSTRUCTURE_INS] on dbo.PDACCOUNTSTRUCTURE
for insert
as
set nocount on
declare @SysID uniqueidentifier
declare @IsBasicGL bit
declare @ChangeAgentID uniqueidentifier
declare @SegmentTableID uniqueidentifier;
declare @Description nvarchar(100);
declare @ID uniqueidentifier = NEWID();
select top 1 @ChangeAgentID = ADDEDBYID, @SysID=PDACCOUNTSYSTEMID, @IsBasicGL = ISBASICGL, @Description=DESCRIPTION, @SegmentTableID =PDACCOUNTTABLESAVAILABLEFORSEGMENTID from inserted where ADDEDBYID is not null order by DATEADDED
if @IsBasicGL = 1
begin
if exists(select COUNT(ID) from PDACCOUNTSTRUCTURE where DESCRIPTION is not null group by PDACCOUNTSYSTEMID,DESCRIPTION having COUNT(ID) > 1)
BEGIN
RAISERROR ('UIX_PDACCOUNTSTRUCTURE_DESCRIPTION_PDACCOUNTSYSTEMID', 16, 1)
ROLLBACK
END
declare @Length int = 0
declare @SegmentType int = 0
select top 1 @Length = LENGTH, @SegmentType = SEGMENTTYPE from inserted order by DATECHANGED
if @SegmentType = 1
begin
If not (@Length < 101)
BEGIN
RAISERROR ('CK_PDACCOUNTSTRUCTURE_VALIDMAXMINLENGTH', 16, 1)
ROLLBACK
END
end
else
If not (@Length > 0 and @Length < 101)
BEGIN
RAISERROR ('CK_PDACCOUNTSTRUCTURE_VALIDMAXMINLENGTH', 16, 1)
ROLLBACK
END
if exists(select * from inserted where segmenttype != 1)
exec USP_GLACCOUNT_REFRESH2 @SysID, @ChangeAgentID
if exists(select * from inserted where segmenttype = 3)
begin
exec USP_PDACCOUNTSEGMENTMAPPINGVIEW_RECREATE
insert into dbo.PDACCOUNTSEGMENTMAPPING (ID,PDACCOUNTSTRUCTUREID, LONGDESCRIPTIONID, ISDEFAULT, ISCONSTANTVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select @ID,ID ,@ID, 1, ISCONSTANTVALUE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED from inserted
end
if exists(select * from inserted where segmenttype = 4)
exec USP_PDCOMPOSITESEGMENTMAPPINGVIEW_RECREATE
end
else if (select count(*) from INSERTED) > 0 -- Do not run if no records were inserted
begin
declare @OVs table (ID uniqueidentifier, SEGMENTCOLUMN smallint, ELEMENTTYPECODE tinyint)
declare @SegmentColumn tinyint
declare @SQL nvarchar(2000)
declare @Columns nvarchar(2000)
update PDACCOUNTSTRUCTURE
set SEGMENTCOLUMN = (select V2.NUM
from
(select ID, row_number() over (order by SEQUENCE) as RowNumber
from dbo.PDACCOUNTSTRUCTURE
where SEGMENTCOLUMN = 0 and PDACCOUNTSYSTEMID = @SysID) V1
inner join
(select top 30 NUM, row_number() over (order by NUM) as RowNumber
from dbo.NUMBERS
where not exists (select * from dbo.PDACCOUNTSTRUCTURE where PDACCOUNTSTRUCTURE.SEGMENTCOLUMN = NUMBERS.NUM and PDACCOUNTSYSTEMID = @SysID )
order by NUM) V2
on V1.RowNumber = V2.RowNumber
where V1.ID = PDACCOUNTSTRUCTURE.ID)
output inserted.ID, inserted.SEGMENTCOLUMN, inserted.ELEMENTTYPECODE into @OVs
where SEGMENTCOLUMN = 0 and PDACCOUNTSYSTEMID = @SysID
declare Cur Cursor fast_forward
for
select SEGMENTCOLUMN
from @OVs
where ELEMENTTYPECODE = 1
open Cur
fetch next from Cur into @SegmentColumn
while @@Fetch_Status = 0
begin
set @SQL = 'if not exists (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N''[dbo].[GLACCOUNT]'') AND name = N''IX_GLACCOUNT_DATAELEMENT'+convert(nvarchar(2),@SegmentColumn)+'ID_DYN'')
create index IX_GLACCOUNT_DATAELEMENT'+convert(nvarchar(2),@SEGMENTCOLUMN)+'ID_DYN on dbo.GLACCOUNT (DATAELEMENT'+convert(nvarchar(2),@SEGMENTCOLUMN)+'ID)'
exec (@SQL)
fetch next from Cur into @SegmentColumn
end
close cur
deallocate cur
select @Columns = (select top 15 'DATAELEMENT'+convert(nvarchar(2),SEGMENTCOLUMN)+'ID,'
from dbo.PDACCOUNTSTRUCTURE
where ELEMENTTYPECODE = 1 and PDACCOUNTSYSTEMID = @SysID
order by SEGMENTCOLUMN
for xml path(''))
set @SQL = 'CREATE NONCLUSTERED INDEX [IX_GLACCOUNT_DATAELEMENTS_DYN] ON [dbo].[GLACCOUNT]
('+substring(@Columns,1,len(@Columns)-1)+')'
if exists (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.GLACCOUNT') AND name = N'IX_GLACCOUNT_DATAELEMENTS_DYN')
set @SQL = @SQL+' with (DROP_EXISTING=ON)'
exec (@SQL)
if (select count(*) from dbo.PDACCOUNTSTRUCTURE where ELEMENTTYPECODE = 1) > 15
begin
select @Columns = (select top 15 'DATAELEMENT'+convert(nvarchar(2),SEGMENTCOLUMN)+'ID,'
from PDACCOUNTSTRUCTURE
where SEGMENTCOLUMN > (select max(SEGMENTCOLUMN) from (select top 15 SEGMENTCOLUMN from dbo.PDACCOUNTSTRUCTURE where ELEMENTTYPECODE = 1) V1)
order by SEGMENTCOLUMN
for xml path(''))
set @SQL = 'CREATE NONCLUSTERED INDEX [IX_GLACCOUNT_DATAELEMENTS_ADDITIONAL_DYN] ON [dbo].[GLACCOUNT]
('+substring(@Columns,1,len(@Columns)-1)+')
INCLUDE (ACCOUNTSTRING,ID)'
if exists (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.GLACCOUNT') AND name = N'IX_GLACCOUNT_DATAELEMENTS_ADDITIONAL_DYN')
set @SQL = @SQL+' with (DROP_EXISTING=ON)'
exec (@SQL)
end
if (select count(1) from dbo.CLOSINGREQUIREMENT where PDACCOUNTSYSTEMID = @SysID) > 0
begin
declare @CurrentDate datetime
set @CurrentDate = getdate()
insert into dbo.CLOSINGREQUIREMENTDETAIL(CLOSINGREQUIREMENTID, ACCOUNTSTRUCTUREID, ACCOUNTREQUIREMENTSCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select CLOSINGREQUIREMENTID, ACCOUNTSTRUCTUREID, case ELEMENTTYPECODE when 1 then 3 else 0 end, @ChangeAgentID, @ChangeAgentID, @CurrentDate, @CurrentDate from
(select ID as CLOSINGREQUIREMENTID from dbo.CLOSINGREQUIREMENT where PDACCOUNTSYSTEMID = @SysID) t
cross join
(select ID as ACCOUNTSTRUCTUREID, ELEMENTTYPECODE from inserted) t2
end
end