USE [Vertragsverwaltung_20160404] GO /****** Object: StoredProcedure [dbo].[sp_get_Lizenzstruktur_suche] Script Date: 02.12.2016 09:08:53 ******/ DROP PROCEDURE [dbo].[sp_get_Lizenzstruktur_suche] GO /****** Object: StoredProcedure [dbo].[sp_get_Lizenzstruktur_suche] 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_suche] @suchstring varchar(255), @mitarbeiternr int, @nuraktive int=0, @alphasort int=0, @suche int=0 AS if @suchstring='' set @suche=0 CREATE TABLE #tmpx( [Lizenznr] [int] , [bezeichnung] [varchar] (255) null, [parentid] [int] null, [SecurityLevelNr] [int] null, [aktiv] [bit] null, [strukturelement] [bit] null, [Treffer] [varchar] (1) null, ) ON [DEFAULT] CREATE TABLE #tmpd( [Lizenznr] [int] , [bezeichnung] [varchar] (255) null, [parentid] [int] null, [SecurityLevelNr] [int] null, [aktiv] [bit] null, [strukturelement] [bit] null, [Treffer] [varchar] (1) null, ) ON [DEFAULT] -- Rootentry für die Treeaufbereitung in der Applikation insert #tmpd (Lizenznr, bezeichnung, parentid, aktiv) values(0,'Root',null,1) declare @appnr int declare @appbez varchar(50) declare @appprnt int declare @anr int declare @bez varchar(50) declare @pid int declare @snr int declare @aktiv bit declare @knr int declare @ste int declare @ste1 int set @appprnt = -1 ----------------------------------------------------------------------------------------- -- Erster Loop über die Applikationen, welche den entsprechenden Suchbegriff beinhalten ----------------------------------------------------------------------------------------- set @suchstring='%' + @suchstring + '%' insert #tmpx SELECT DISTINCT dbo.Lizenz.LizenzNr, dbo.Lizenz.Bezeichnung, dbo.Lizenz.ParentID, dbo.Lizenz.SecurityLevelNr, dbo.Lizenz.Aktiv, dbo.Lizenz.Strukturelement, '*' AS Treffer FROM dbo.Lizenzschluessel FULL OUTER JOIN dbo.Lizenzkauf FULL OUTER JOIN dbo.LizenzVertragselementApplikation ON dbo.Lizenzkauf.Vertragselementapplikationnr = dbo.LizenzVertragselementApplikation.LizenzVEApplNr FULL OUTER JOIN dbo.Vertragselement FULL OUTER JOIN dbo.VertragselementApplikation FULL OUTER JOIN dbo.Applikation ON dbo.VertragselementApplikation.Applikationnr = dbo.Applikation.ApplikationNr ON dbo.Vertragselement.Vertragselementnr = dbo.VertragselementApplikation.Vertragselementnr ON dbo.LizenzVertragselementApplikation.VertragselementApplikationNr = dbo.VertragselementApplikation.VertragselementApplikationnr FULL OUTER JOIN dbo.Lizenz ON dbo.LizenzVertragselementApplikation.Lizenznr = dbo.Lizenz.LizenzNr ON dbo.Lizenzschluessel.Lizenzkaufnr = dbo.Lizenzkauf.LizenzkaufNr WHERE (dbo.Lizenz.Bezeichnung LIKE @suchstring) OR (dbo.LizenzVertragselementApplikation.Bemerkung LIKE @suchstring) OR (dbo.Lizenz.Beschreibung LIKE @suchstring) OR (dbo.VertragselementApplikation.Bemerkung LIKE @suchstring) OR (dbo.Vertragselement.Bezeichnung LIKE @suchstring) OR (dbo.Vertragselement.Beschreibung LIKE @suchstring) OR (dbo.Lizenzkauf.KGNummer LIKE @suchstring) OR (dbo.Lizenzkauf.SAPNummer LIKE @suchstring) OR (dbo.Lizenzkauf.Bemerkung LIKE @suchstring) OR (dbo.Applikation.Bezeichnung LIKE @suchstring) OR (dbo.Lizenzschluessel.Lizenzschluessel LIKE @suchstring) OR (dbo.Lizenzschluessel.Bemerkung LIKE @suchstring) insert #tmpx SELECT DISTINCT dbo.Lizenz.LizenzNr, dbo.Lizenz.Bezeichnung, dbo.Lizenz.ParentID, dbo.Lizenz.SecurityLevelNr, dbo.Lizenz.Aktiv, dbo.Lizenz.Strukturelement, '*' AS Treffer FROM dbo.Vertragselement INNER JOIN dbo.VertragselementApplikation ON dbo.Vertragselement.Vertragselementnr = dbo.VertragselementApplikation.Vertragselementnr INNER JOIN dbo.Vertragspartner ON dbo.Vertragselement.VertragspartnerNr = dbo.Vertragspartner.VertragspartnerNr INNER JOIN dbo.Applikation ON dbo.VertragselementApplikation.Applikationnr = dbo.Applikation.ApplikationNr INNER JOIN dbo.Lizenz INNER JOIN dbo.LizenzVertragselementApplikation ON dbo.Lizenz.LizenzNr = dbo.LizenzVertragselementApplikation.Lizenznr ON dbo.VertragselementApplikation.VertragselementApplikationnr = dbo.LizenzVertragselementApplikation.VertragselementApplikationNr WHERE (dbo.Vertragselement.Bezeichnung LIKE @suchstring) OR (dbo.Vertragspartner.NameZ1 LIKE @suchstring) OR (dbo.Applikation.Bezeichnung LIKE @suchstring) -- SELECT DISTINCT dbo.Lizenz.LizenzNr, dbo.Lizenz.Bezeichnung, dbo.Lizenz.ParentID, dbo.Lizenz.SecurityLevelNr, dbo.Lizenz.Aktiv, dbo.Lizenz.Strukturelement, '*' AS Treffer --FROM dbo.Applikation INNER JOIN -- dbo.VertragselementApplikation ON dbo.Applikation.ApplikationNr = dbo.VertragselementApplikation.Applikationnr INNER JOIN -- dbo.Vertragspartner INNER JOIN -- dbo.Vertragselement ON dbo.Vertragspartner.VertragspartnerNr = dbo.Vertragselement.VertragspartnerNr ON -- dbo.VertragselementApplikation.Vertragselementnr = dbo.Vertragselement.Vertragselementnr INNER JOIN -- dbo.LizenzVertragselementApplikation INNER JOIN -- dbo.Lizenz ON dbo.LizenzVertragselementApplikation.Lizenznr = dbo.Lizenz.LizenzNr ON -- dbo.VertragselementApplikation.VertragselementApplikationnr = dbo.LizenzVertragselementApplikation.VertragselementApplikationNr --WHERE dbo.lizenz.bezeichnung like @suchstring or dbo.lizenz.beschreibung like @suchstring or -- dbo.Vertragselement.Bezeichnung like @suchstring or dbo.Applikation.Bezeichnung like @suchstring or dbo.Vertragspartner.NameZ1 like @suchstring if @nuraktive=1 begin delete from #tmpx where aktiv<>1 end if @nuraktive=0 begin delete from #tmpx where aktiv<>0 end declare xc cursor for select [lizenznr], [bezeichnung],[parentid],[SecurityLevelNr],[aktiv], strukturelement from #tmpx open xc fetch next from xc into @appnr, @appbez, @pid, @snr, @aktiv, @ste while @@fetch_status=0 begin ----------------------------------------------------------------------------------------- -- Zweiter Loop über die Einträge der obesten Ebene der Lizenzen ----------------------------------------------------------------------------------------- declare yc cursor for select lizenznr, bezeichnung, parentid, securitylevelnr, aktiv, strukturelement from lizenz where Lizenznr=@appnr open yc fetch next from yc into @anr, @bez, @pid, @snr, @aktiv , @ste1 while @@fetch_status=0 begin insert #tmpd(Lizenznr, bezeichnung, parentid, securitylevelnr, aktiv, strukturelement) values (@anr, @bez, @appprnt, @snr, @aktiv,@ste1) ----------------------------------------------------------------------------------------- -- Je Applikation die untergeordneten Applikationen/Module auslesen ----------------------------------------------------------------------------------------- --execute dbo.sp_get_applstruktur_down @anr,1, @anr execute dbo.sp_get_lizenzstruktur_up @anr,1 fetch next from yc into @anr, @bez, @pid, @snr, @aktiv , @ste1 end close yc deallocate yc set @appprnt = @appprnt - 1 fetch next from xc into @appnr, @appbez, @pid, @snr, @aktiv, @ste end close xc deallocate xc ----------------------------------------------------------------------------------------- -- Daten zurück geben und temporäre Tabelle löschen ----------------------------------------------------------------------------------------- delete from #tmpd where Lizenznr is null insert #tmpd (lizenznr, bezeichnung, parentid, aktiv) values(0,'Root',null,1) --update #tmpd set strukturelement=0 delete from #tmpd where parentid<0 if @alphasort = 1 begin update #tmpd set parentid=0 where parentid<0 delete from #tmpd where Lizenznr < 0 if @suche=1 begin update #tmpd set treffer='*' where [lizenznr] in (select [Lizenznr] from #tmpx) if @nuraktive=0 begin select distinct lizenznr, bezeichnung, parentid, aktiv, strukturelement,Treffer from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end else begin select distinct Lizenznr, bezeichnung, parentid, aktiv, strukturelement,Treffer from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end drop table #tmpd return end if @nuraktive=0 begin select distinct lizenznr, bezeichnung, parentid, aktiv, strukturelement,Treffer from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end else begin select distinct lizenznr, bezeichnung, parentid, aktiv, strukturelement,Treffer from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end drop table #tmpd return end if @suche=1 begin update #tmpd set treffer='*' where lizenznr in (select lizenznr from #tmpx) if @nuraktive=0 begin select distinct lizenznr, bezeichnung, parentid, aktiv, strukturelement,Treffer from #tmpd order by bezeichnung end else begin select distinct lizenznr, bezeichnung, parentid, aktiv, strukturelement,Treffer from #tmpd order by bezeichnung end drop table #tmpd return end if @nuraktive=0 begin select distinct lizenznr, bezeichnung, parentid, aktiv, strukturelement,Treffer from #tmpd order by bezeichnung end else begin select distinct lizenznr, bezeichnung, parentid, aktiv, strukturelement,Treffer from #tmpd order by bezeichnung -- select distinct applikationsnr, bezeichnung, parentid, lic, aktiv from #tmpd where aktiv=1 order by bezeichnung end drop table #tmpd return GO