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.
ITSM/.svn/pristine/30/30478c384b3b640972526899519...

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