USE [Vertragsverwaltung_20160404] GO /****** Object: StoredProcedure [dbo].[sp_get_Lizenzstruktur] Script Date: 02.12.2016 09:08:53 ******/ DROP PROCEDURE [dbo].[sp_get_Lizenzstruktur] GO /****** Object: StoredProcedure [dbo].[sp_get_Lizenzstruktur] Script Date: 02.12.2016 09:08:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO -- ============================================= -- Author: -- Create date: <13.01.2008> -- Description: -- ============================================= CREATE PROCEDURE [dbo].[sp_get_Lizenzstruktur] @mitarbeiternr int, @nuraktive int=0, @alphasort int=0, @applikationnr int=0, @lizenztyp int=0 AS CREATE TABLE #tmpd( [Lizenznr] [int] , [bezeichnung] [varchar] (255) null, [parentid] [int] null, [SecurityLevelNr] [int] null, [aktiv] [bit] null, [Strukturelement] bit null, ) ON [DEFAULT] -- Rootentry für die Treeaufbereitung in der Applikation insert #tmpd (lizenznr, bezeichnung, parentid, aktiv) values(0,'Root',null,1) declare @liznr int declare @lizbez varchar(50) declare @lizprnt int declare @anr int declare @bez varchar(50) declare @pid int declare @snr int declare @aktiv bit declare @knr int declare @st int set @lizprnt = -1 ----------------------------------------------------------------------------------------- -- Erster Loop über die Applikationen, welche den entsprechenden Suchbegriff beinhalten ----------------------------------------------------------------------------------------- SELECT DISTINCT dbo.Lizenz.LizenzNr, dbo.Lizenz.Bezeichnung, dbo.Lizenz.ParentID, dbo.Lizenz.SecurityLevelNr, dbo.Lizenz.Aktiv, dbo.Lizenz.Strukturelement into #tmpx from dbo.lizenz where lizenznr=-999999 if @applikationnr <> 0 begin Insert #tmpx SELECT DISTINCT dbo.Lizenz.LizenzNr, dbo.Lizenz.Bezeichnung, dbo.Lizenz.ParentID, dbo.Lizenz.SecurityLevelNr, dbo.Lizenz.Aktiv, dbo.Lizenz.Strukturelement FROM dbo.VertragselementApplikation INNER JOIN dbo.LizenzVertragselementApplikation ON dbo.VertragselementApplikation.VertragselementApplikationnr = dbo.LizenzVertragselementApplikation.VertragselementApplikationNr INNER JOIN dbo.Lizenz ON dbo.LizenzVertragselementApplikation.Lizenznr = dbo.Lizenz.LizenzNr WHERE (dbo.VertragselementApplikation.Applikationnr = @applikationnr) and dbo.Lizenz.SecurityLevelNrin (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr)) end else begin insert #tmpx SELECT DISTINCT dbo.Lizenz.lizenznr, dbo.lizenz.Bezeichnung, dbo.lizenz.ParentID, dbo.Lizenz.SecurityLevelNr, dbo.Lizenz.Aktiv, dbo.Lizenz.Strukturelement FROM dbo.Lizenz where dbo.Lizenz.SecurityLevelNrin (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr)) end if @lizenztyp=2 begin delete from #tmpx where aktiv<>1 end if @lizenztyp=3 begin delete from #tmpx where aktiv<>0 end if @lizenztyp=4 begin truncate table #tmpx set @applikationnr=0 insert #tmpx select dbo.Lizenz.LizenzNr, dbo.Lizenz.Bezeichnung, dbo.Lizenz.ParentID, dbo.Lizenz.SecurityLevelNr, dbo.Lizenz.Aktiv, dbo.Lizenz.Strukturelement from lizenz where LizenzNr not in (select LizenzNr from LizenzVertragselementApplikation where Lizenznr>0) and dbo.Lizenz.SecurityLevelNrin (select SecurityLevelNr from dbo.Get_SecurityLevelTab(@mitarbeiternr)) and aktiv=1 end declare xc cursor for select * from #tmpx open xc fetch next from xc into @liznr, @lizbez, @pid, @snr, @aktiv ,@st while @@fetch_status=0 begin insert #tmpd(Lizenznr, bezeichnung, parentid, securitylevelnr, aktiv,Strukturelement) values (@liznr, @lizbez, @pid, @snr, @aktiv,@st) execute dbo.sp_get_Lizenzstruktur_up @Liznr,1 fetch next from xc into @Liznr, @Lizbez, @pid, @snr, @aktiv,@st end close xc deallocate xc select * into #tmpxx from #tmpd declare @rc int select @rc=COUNT(*) from #tmpxx if @applikationnr <> 0 and @rc > 0 begin declare xc cursor for select * from #tmpxx open xc fetch next from xc into @liznr, @lizbez, @pid, @snr, @aktiv ,@st while @@fetch_status=0 begin insert #tmpd(Lizenznr, bezeichnung, parentid, securitylevelnr, aktiv,Strukturelement) values (@liznr, @lizbez, @pid, @snr, @aktiv,@st) execute dbo.sp_get_Lizenzstruktur_down @Liznr,1 fetch next from xc into @Liznr, @Lizbez, @pid, @snr, @aktiv,@st end close xc deallocate xc end ----------------------------------------------------------------------------------------- -- Daten zurück geben und temporäre Tabelle löschen ----------------------------------------------------------------------------------------- insert #tmpd (Lizenznr, bezeichnung, parentid, aktiv) values(0,'Root',null,1) if @alphasort = 1 begin update #tmpd set parentid=0 where parentid<0 delete from #tmpd where Lizenznr < 0 if @nuraktive=0 begin select distinct Lizenznr, bezeichnung, parentid, aktiv, strukturelement,'' as Treffer from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end else begin select distinct Lizenznr, bezeichnung, parentid, aktiv, strukturelement,'' as Treffer from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end drop table #tmpd return end update #tmpd set strukturelement=0 where strukturelement is null if @nuraktive=0 begin select distinct Lizenznr, bezeichnung, parentid, aktiv, strukturelement from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end else begin select distinct Lizenznr, bezeichnung, parentid, aktiv, strukturelement from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end drop table #tmpd GO