USE [Vertragsverwaltung_20160404] GO /****** Object: StoredProcedure [dbo].[sp_vertragsuebersicht_get_Struktur_Vertragstyp_sik] Script Date: 02.12.2016 09:08:53 ******/ DROP PROCEDURE [dbo].[sp_vertragsuebersicht_get_Struktur_Vertragstyp_sik] GO /****** Object: StoredProcedure [dbo].[sp_vertragsuebersicht_get_Struktur_Vertragstyp_sik] Script Date: 02.12.2016 09:08:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE proc [dbo].[sp_vertragsuebersicht_get_Struktur_Vertragstyp_sik] @vertragstypnr int, @mitarbeiternr int, @details int, @suchstring varchar(255) as CREATE TABLE #tmpd( [vertragselementnr] [int] , [bezeichnung] [varchar] (255) null, [parentid] [int] null, [Vertragstypnr] [int], [aktiv] [bit] null ) ON [DEFAULT] set @suchstring='%'+@suchstring+'%' declare @vnr int declare @vtype varchar(255) declare @tmpid int declare @tmpid_base int declare @aktiv bit set @tmpid=-100 ---------------------------------------------------------------------------------------------------------- -- Struktur nach Vertragstyp ---------------------------------------------------------------------------------------------------------- insert #tmpd (vertragselementnr, bezeichnung, parentid, vertragstypnr, aktiv) values(0,'Root',null,0,1) select * from #tmpd -- S„mtliche relevanten Root-Strukturen auslesen - nur diejenigen, bei welchen Vertragselemente vorhanden sind und der User berechtigt ist declare firstloop cursor for SELECT distinct dbo.Vertragselement.VertragspartnerNr, dbo.Vertragspartner.NameZ1 + ' ' + dbo.Vertragspartner.NameZ2 + ', ' + dbo.Vertragspartner.PLZ + ' ' + dbo.Vertragspartner.Ort AS Partner, dbo.Vertragspartner.aktiv --,dbo.Vertragselement.Vertragselementnr FROM dbo.Vertragselement INNER JOIN dbo.Vertragspartner ON dbo.Vertragselement.VertragspartnerNr = dbo.Vertragspartner.VertragspartnerNr WHERE (dbo.Vertragselement.Aktiv = 1) AND (dbo.Vertragselement.VertragstypNr = @vertragstypnr) and (dbo.Vertragselement.SecurityLevelNr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr))) open firstloop fetch next from firstloop into @vnr, @vtype, @aktiv while @@fetch_status=0 begin -- Je Root-Struktur die untergerordneten Vertragselemente auslesen insert #tmpd (vertragselementnr, bezeichnung, parentid, vertragstypnr, aktiv) values(@tmpid,@vtype,0,@vnr, @aktiv) declare @tmp int declare xc cursor for select Vertragselementnr from vertragselement where vertragspartnernr=@vnr and parentid =0 and securitylevelnr in (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr)) and vertragselement.vertragstypnr=@vertragstypnr open xc fetch next from xc into @tmp while @@fetch_status=0 begin execute dbo.sp_vertragsuebersicht_get_struktur_down @tmp,1, @vertragstypnr, @tmpid fetch next from xc into @tmp end close xc deallocate xc set @tmpid=@tmpid-1 fetch next from firstloop into @vnr, @vtype, @aktiv end close firstloop deallocate firstloop if @details=0 begin delete from #tmpd where parentid > 0 end select distinct * from #tmpd order by bezeichnung return SELECT distinct dbo.vertragstyp.vertragstypnr,dbo.Vertragstyp.Vertragstyp, #tmpd.* FROM dbo.Vertragselement INNER JOIN #tmpd ON dbo.Vertragselement.Vertragselementnr = #tmpd.vertragselementnr INNER JOIN dbo.Vertragstyp ON dbo.Vertragselement.VertragstypNr = dbo.Vertragstyp.Vertragstypnr order by #tmpd.bezeichnung ,vertragstyp, #tmpd.parentid return GO