You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
337 lines
21 KiB
337 lines
21 KiB
USE [Vertragsverwaltung_20160404]
|
|
GO
|
|
/****** Object: StoredProcedure [dbo].[sp_vertragsuebersicht_get_struktur] Script Date: 02.12.2016 09:08:53 ******/
|
|
DROP PROCEDURE [dbo].[sp_vertragsuebersicht_get_struktur]
|
|
GO
|
|
/****** Object: StoredProcedure [dbo].[sp_vertragsuebersicht_get_struktur] Script Date: 02.12.2016 09:08:55 ******/
|
|
SET ANSI_NULLS ON
|
|
GO
|
|
SET QUOTED_IDENTIFIER OFF
|
|
GO
|
|
|
|
CREATE proc [dbo].[sp_vertragsuebersicht_get_struktur]
|
|
@vertragstypnr int,
|
|
@vertragspartnernr int,
|
|
@mitarbeiternr int,
|
|
@details int,
|
|
@suchstring varchar(255)
|
|
as
|
|
set nocount on
|
|
|
|
CREATE TABLE #tmpd(
|
|
[vertragselementnr] [int] ,
|
|
[bezeichnung] [varchar] (255) null,
|
|
[parentid] [int] null,
|
|
[Vertragstypnr] [int],
|
|
[aktiv] [bit] null,
|
|
[vertragselementnrursprung] [int] null,
|
|
[basevertragstypnr] [int] null,
|
|
[key] [int] IDENTITY(1,1) NOT NULL,
|
|
[level] int null,
|
|
[loopcnt] int null,
|
|
|
|
) ON [DEFAULT]
|
|
|
|
CREATE TABLE #tmpe(
|
|
[vertragselementnr] [int] ,
|
|
[bezeichnung] [varchar] (255) null,
|
|
[parentid] [int] null,
|
|
[Vertragstypnr] [int],
|
|
[aktiv] [bit] null,
|
|
[vertragselementnrursprung] [int] null,
|
|
[basevertragstypnr] [int] null,
|
|
[key] [int] NOT NULL,
|
|
[level] int null,
|
|
[loopcnt] int null,
|
|
|
|
) ON [DEFAULT]
|
|
|
|
CREATE TABLE #tmps(
|
|
[vertragselementnr] [int] ,
|
|
[bezeichnung] [varchar] (255) null,
|
|
[parentid] [int] null,
|
|
[Vertragstypnr] [int],
|
|
[aktiv] [bit] null,
|
|
[vertragselementnrursprung] [int] null,
|
|
[basevertragstypnr] [int] null,
|
|
[key] [int] NOT NULL,
|
|
[level] int null,
|
|
[loopcnt] int null,
|
|
|
|
) ON [DEFAULT]
|
|
|
|
declare @vnr int
|
|
declare @vtype varchar(255)
|
|
declare @tmpid int
|
|
declare @tmpid_base int
|
|
declare @aktiv bit
|
|
declare @tmp int
|
|
declare @loop int
|
|
declare @keyvalue int
|
|
declare @keyvalue1 int
|
|
declare @key int
|
|
declare @loopcnt int
|
|
|
|
set @tmpid=-100
|
|
set @loopcnt = 0
|
|
----------------------------------------------------------------------------------------------------------
|
|
-- Struktur nach Partner auslesen / ohne Suchstring - Suchstring berücksichtigt Vertragsinhalt
|
|
----------------------------------------------------------------------------------------------------------
|
|
Struktur_Nach_Partner:
|
|
--if @suchstring<>'' goto suche_mit_searchstring
|
|
-- Vertragstypen mit Vertragselementen
|
|
insert #tmpd (vertragselementnr, bezeichnung, parentid, vertragstypnr, aktiv) values(0,'Root',null,0,1)
|
|
set @loop=0
|
|
declare @rootvertragstypnr int, @rootvertragstyp varchar(255)
|
|
declare xc cursor for
|
|
SELECT DISTINCT dbo.Vertragstyp.Vertragstypnr*-100, dbo.Vertragstyp.Vertragstyp
|
|
FROM dbo.Vertragstyp INNER JOIN
|
|
dbo.Vertragselement ON dbo.Vertragstyp.Vertragstypnr = dbo.Vertragselement.VertragstypNr
|
|
WHERE (dbo.Vertragselement.VertragspartnerNr = @vertragspartnernr) and securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr))
|
|
ORDER BY dbo.Vertragstyp.Vertragstyp
|
|
open xc
|
|
fetch next from xc into @rootvertragstypnr, @rootvertragstyp
|
|
while @@fetch_status=0 begin
|
|
-- Vertragselemente mit parentid=0 mit entsprechendem Vertragstyp
|
|
insert #tmpd (vertragselementnr, bezeichnung, parentid, vertragstypnr, aktiv) values(@rootvertragstypnr,@rootvertragstyp,0,@rootvertragstypnr,@aktiv)
|
|
|
|
declare xy cursor for
|
|
select Vertragselementnr, parentid, vertragstypnr from vertragselement
|
|
where vertragspartnernr=@vertragspartnernr and vertragstypnr*-100=@rootvertragstypnr and parentid=0 and securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr))
|
|
open xy
|
|
fetch next from xy into @tmp, @tmpid, @vnr
|
|
while @@fetch_status=0 begin
|
|
execute dbo.sp_vertragsuebersicht_get_struktur_down @tmp,1, @vnr, @tmpid, @loopcnt
|
|
set @loopcnt=@loopcnt+1
|
|
fetch next from xy into @tmp, @tmpid, @vnr
|
|
end
|
|
close xy
|
|
deallocate xy
|
|
-- Vertragselemente mit Parentid<>0
|
|
declare xy cursor for
|
|
select Vertragselementnr, parentid, vertragstypnr from vertragselement
|
|
where vertragspartnernr=@vertragspartnernr and vertragstypnr*-100=@rootvertragstypnr and parentid<>0 and securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr))
|
|
and vertragselementnr not in (select vertragselementnr from #tmpd)
|
|
open xy
|
|
fetch next from xy into @tmp, @tmpid, @vnr
|
|
while @@fetch_status=0 begin
|
|
execute dbo.sp_vertragsuebersicht_get_struktur_down @tmp,1, @vnr, @tmpid, @loopcnt
|
|
set @loopcnt=@loopcnt+1
|
|
fetch next from xy into @tmp, @tmpid, @vnr
|
|
end
|
|
close xy
|
|
deallocate xy
|
|
|
|
-- Eindeutige Schlüssel
|
|
if @loop>0 begin
|
|
--select * from #tmpd
|
|
set @keyvalue=(@loop*10000)+100000
|
|
set @keyvalue1 = @keyvalue
|
|
update #tmpd set vertragselementnr=vertragselementnr+@keyvalue where [vertragselementnrursprung]>0
|
|
update #tmpd set parentid=parentid+@keyvalue where [vertragselementnrursprung]>0
|
|
select top 1 @keyvalue=vertragselementnr, @key=[key] from #tmpd where [vertragselementnrursprung] is null
|
|
update #tmpd set parentid=@keyvalue where parentid not in (select vertragselementnr from #tmpd)
|
|
|
|
|
|
end
|
|
update #tmpd set basevertragstypnr=@rootvertragstypnr/-100
|
|
set @loop=@loop+1
|
|
update #tmpd set parentid=@rootvertragstypnr where parentid=0
|
|
insert #tmpe select * from #tmpd
|
|
delete from #tmpd
|
|
fetch next from xc into @rootvertragstypnr, @rootvertragstyp
|
|
end
|
|
close xc
|
|
deallocate xc
|
|
update #tmpe set parentid=0 where parentid=vertragselementnr
|
|
update #tmpe set aktiv=1 where aktiv is null
|
|
-- update #tmpe set parentid=0 where parentid not in (select vertragselementnr from #tmpe)
|
|
update #tmpe set parentid=vertragstypnr where parentid not in (select vertragselementnr from #tmpe)
|
|
|
|
if @suchstring='' begin
|
|
select *, null as Securitylevelnr into #tmpxx from #tmpe order by [key]
|
|
update #tmpxx set securitylevelnr = (select securitylevelnr from dbo.vertragselement where dbo.vertragselement.vertragselementnr = #tmpxx.vertragselementnrursprung)
|
|
select * from #tmpxx where securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr)) or [level] is null order by [key]
|
|
|
|
-- -select * from #tmpe order by [key]
|
|
drop table #tmpd
|
|
drop table #tmpe
|
|
drop table #tmps
|
|
drop table #tmpxx
|
|
return
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------
|
|
-- Suche mit Searchstring
|
|
-------------------------------------------------------------------------------------------
|
|
Suche_Mit_Searchstring:
|
|
declare @level int
|
|
|
|
declare @pid int
|
|
|
|
declare @xx int
|
|
|
|
declare @xxpid int
|
|
|
|
declare @cnt int
|
|
|
|
declare @elementnr int
|
|
|
|
declare @xxelementnr int
|
|
|
|
|
|
|
|
declare @xkey int
|
|
|
|
declare @xlevel int
|
|
|
|
declare @xpid int
|
|
|
|
declare @ykey int
|
|
|
|
|
|
|
|
declare xc cursor for
|
|
|
|
select [key],basevertragstypnr,parentid, level, loopcnt, vertragselementnr from #tmpe where dbo.search_vertragselement([vertragselementnrursprung],@suchstring)=1
|
|
|
|
open xc
|
|
|
|
fetch next from xc into @tmp,@vnr,@pid, @level, @loopcnt, @elementnr
|
|
|
|
while @@fetch_status=0 begin
|
|
|
|
set @xpid=@pid
|
|
|
|
insert #tmps select * from #tmpe where [key]=@tmp
|
|
|
|
while @pid > 0 begin
|
|
|
|
select @tmp=[key], @pid=parentid from #tmpe where vertragselementnr=@pid
|
|
|
|
insert #tmps select * from #tmpe where [key]=@tmp
|
|
|
|
end
|
|
|
|
|
|
|
|
declare xx cursor for select [key], parentid, vertragselementnr
|
|
|
|
from #tmpe where loopcnt = @loopcnt and level>@level
|
|
|
|
open xx
|
|
|
|
fetch next from xx into @xx, @xxpid, @xxelementnr
|
|
|
|
while @@fetch_status = 0 begin
|
|
|
|
select @cnt=count([key]) from #tmpe where parentid in (select vertragselementnr from #tmpe)
|
|
|
|
if @cnt > 0 insert #tmps select * from #tmpe where [key]=@xx and @xxelementnr not in (select vertragselementnr from #tmps)
|
|
|
|
fetch next from xx into @xx, @xxpid, @xxelementnr
|
|
|
|
end
|
|
|
|
close xx
|
|
|
|
deallocate xx
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
-- insert #tmps select * from #tmpe where (basevertragstypnr=@vnr and [key]<=@tmp and parentid<>@pid) or ([key]=@tmp) and
|
|
|
|
-- @elementnr not in (select vertragselementnr from #tmps) and parentid > 0
|
|
|
|
-- order by [key]
|
|
|
|
insert #tmps select * from #tmpe where loopcnt=@loopcnt
|
|
|
|
--(basevertragstypnr=@vnr and [key]<=@tmp and parentid<>@pid) or ([key]=@tmp) and
|
|
|
|
declare xx cursor for select [key], parentid, vertragselementnr
|
|
|
|
from #tmpe where loopcnt = @loopcnt and level>@level
|
|
|
|
open xx
|
|
|
|
fetch next from xx into @xx, @xxpid, @xxelementnr
|
|
|
|
while @@fetch_status = 0 begin
|
|
|
|
select @cnt=count([key]) from #tmpe where parentid in (select vertragselementnr from #tmpe)
|
|
|
|
if @cnt > 0 insert #tmps select * from #tmpe where [key]=@xx and @xxelementnr not in (select vertragselementnr from #tmps)
|
|
|
|
fetch next from xx into @xx, @xxpid, @xxelementnr
|
|
|
|
end
|
|
|
|
close xx
|
|
|
|
deallocate xx
|
|
|
|
-- insert #tmps select * from #tmpe where loopcnt = @loopcnt and level > @level and parentid in (select vertragselementnr from #tmps)
|
|
|
|
fetch next from xc into @tmp,@vnr,@pid, @level, @loopcnt, @elementnr
|
|
|
|
end
|
|
|
|
|
|
|
|
*/
|
|
|
|
fetch next from xc into @tmp,@vnr,@pid, @level, @loopcnt, @elementnr
|
|
|
|
end
|
|
|
|
close xc
|
|
|
|
deallocate xc
|
|
|
|
|
|
|
|
insert #tmps select * from #tmpe where vertragselementnr in (select parentid from #tmps where parentid < 0)
|
|
|
|
select @cnt=count(*) from #tmps where bezeichnung='Root'
|
|
|
|
if @cnt<1 begin
|
|
|
|
insert #tmps (vertragselementnr, bezeichnung, parentid, vertragstypnr, aktiv,[key]) values(0,'Root',null,0,1,999999)
|
|
|
|
end
|
|
|
|
|
|
|
|
--alter table #tmps drop column [key]
|
|
|
|
--alter table #tmps drop column [LEVEL]
|
|
|
|
--alter table #tmps drop column [LOOPCNT]
|
|
|
|
|
|
|
|
|
|
|
|
-- select distinct * from #tmps order by [key]
|
|
select distinct *, null as Securitylevelnr into #tmpyy from #tmps order by [key]
|
|
update #tmpyy set securitylevelnr = (select securitylevelnr from dbo.vertragselement where dbo.vertragselement.vertragselementnr = #tmpyy.vertragselementnrursprung)
|
|
select * from #tmpyy where securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr)) or [level] is null order by [key]
|
|
|
|
|
|
drop table #tmpd
|
|
drop table #tmpe
|
|
drop table #tmps
|
|
drop table #tmpyy
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
GO
|