USE [Vertragsverwaltung_20160404] GO /****** Object: StoredProcedure [dbo].[sp_get_applstruktur_suche_20100911] Script Date: 02.12.2016 09:08:53 ******/ DROP PROCEDURE [dbo].[sp_get_applstruktur_suche_20100911] GO /****** Object: StoredProcedure [dbo].[sp_get_applstruktur_suche_20100911] 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_applstruktur_suche_20100911] @suchstring varchar(255), @mitarbeiternr int, @nuraktive int=0, @arcobject bit=0, @alphasort int=0 AS CREATE TABLE #tmpx( [applikationsnr] [int] , [bezeichnung] [varchar] (255) null, [parentid] [int] null, [SecurityLevelNr] [int] null, [aktiv] [bit] null, --[strukturelement] [bit] null, ) ON [DEFAULT] CREATE TABLE #tmpd( [applikationsnr] [int] , [bezeichnung] [varchar] (255) null, [parentid] [int] null, [SecurityLevelNr] [int] null, [kategorienr] [int] null, [lic] bit null, [aktiv] [bit] null, [strukturelement] [bit] null, ) ON [DEFAULT] -- Rootentry für die Treeaufbereitung in der Applikation insert #tmpd (applikationsnr, 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 set @appprnt = -1 ----------------------------------------------------------------------------------------- -- Erster Loop über die Applikationen, welche den entsprechenden Suchbegriff beinhalten ----------------------------------------------------------------------------------------- -- Suche über Architekturobjekte if @arcobject=1 begin set @suchstring='%' + @suchstring + '%' insert #tmpx SELECT dbo.Applikation.ApplikationNr, dbo.Applikation.Bezeichnung, dbo.Applikation.ParentID, dbo.Applikation.SecurityLevelNr, dbo.Applikation.Aktiv--,dbo.Applikation.Strukturelement FROM dbo.ApplikationArchitekturObjectAppl RIGHT OUTER JOIN dbo.Applikation INNER JOIN dbo.ApplikationArchitekturObject ON dbo.Applikation.ApplikationNr = dbo.ApplikationArchitekturObject.ApplikationNr LEFT OUTER JOIN dbo.ApplikationArchitekturObjectDB AS ApplikationArchitekturObjectDB_1 ON dbo.ApplikationArchitekturObject.Guid = ApplikationArchitekturObjectDB_1.Guid ON dbo.ApplikationArchitekturObjectAppl.Guid = dbo.ApplikationArchitekturObject.Guid WHERE (dbo.ApplikationArchitekturObject.Name LIKE @suchstring) OR (dbo.ApplikationArchitekturObject.Description LIKE @suchstring) OR (dbo.ApplikationArchitekturObjectAppl.Applikation LIKE @suchstring) OR (dbo.ApplikationArchitekturObjectAppl.Beschreibung LIKE @suchstring) OR (ApplikationArchitekturObjectDB_1.Datenbank LIKE @suchstring) OR (ApplikationArchitekturObjectDB_1.Beschreibung LIKE @suchstring) if @nuraktive=1 begin delete from #tmpx where aktiv<>1 end if @nuraktive=1 begin delete from #tmpx where aktiv<>1 end if @nuraktive=0 begin delete from #tmpx where aktiv<>0 end end else begin print 'b' set @suchstring='%' + @suchstring + '%' insert #tmpx SELECT DISTINCT dbo.Applikation.ApplikationNr, dbo.Applikation.Bezeichnung, dbo.Applikation.ParentID, dbo.Applikation.SecurityLevelNr, dbo.Applikation.Aktiv --, dbo.Applikation.Strukturelement FROM dbo.Applikation left outer JOIN dbo.ApplikationKontakt ON dbo.Applikation.ApplikationNr = dbo.ApplikationKontakt.Applikationnr left outer JOIN dbo.Person ON dbo.ApplikationKontakt.PersonNr = dbo.Person.PersonNr WHERE bezeichnung like @suchstring or kurzbeschreibung like @suchstring or dbo.person.name like @suchstring or dbo.person.vorname like @suchstring if @nuraktive=1 begin delete from #tmpx where aktiv<>1 end if @nuraktive=1 begin delete from #tmpx where aktiv<>1 end if @nuraktive=0 begin delete from #tmpx where aktiv<>0 end end declare xc cursor for select * from #tmpx -- select Applikationnr, bezeichnung, parentid, securitylevelnr, aktiv from applikation -- where bezeichnung like @suchstring or kurzbeschreibung like @suchstring open xc fetch next from xc into @appnr, @appbez, @pid, @snr, @aktiv while @@fetch_status=0 begin --insert #tmpd(applikationsnr, bezeichnung, parentid, securitylevelnr, aktiv) -- values (@appnr, @appbez, @pid ,@snr, @aktiv) ----------------------------------------------------------------------------------------- -- Zweiter Loop über die Einträge der obesten Ebene der Applikationen ----------------------------------------------------------------------------------------- declare yc cursor for select applikationnr, bezeichnung, parentid, securitylevelnr, applikationkategorienr, aktiv from applikation where applikationnr=@appnr open yc fetch next from yc into @anr, @bez, @pid, @snr, @knr, @aktiv while @@fetch_status=0 begin insert #tmpd(applikationsnr, bezeichnung, parentid, securitylevelnr, kategorienr, aktiv) values (@anr, @bez, @appprnt, @snr, @knr, @aktiv) ----------------------------------------------------------------------------------------- -- Je Applikation die untergeordneten Applikationen/Module auslesen ----------------------------------------------------------------------------------------- --execute dbo.sp_get_applstruktur_down @anr,1, @anr execute dbo.sp_get_applstruktur_up @anr,1 fetch next from yc into @anr, @bez, @pid, @snr, @knr, @aktiv end close yc deallocate yc set @appprnt = @appprnt - 1 fetch next from xc into @appnr, @appbez, @pid, @snr, @aktiv end close xc deallocate xc update #tmpd set kategorienr = (select applikationkategorienr*-1 from applikation where applikationnr=#tmpd.applikationsnr and #tmpd.parentid=0) update #tmpd set parentid=kategorienr where kategorienr < 0 declare kc cursor for SELECT distinct dbo.ApplikationKategorie.ApplikationKategorieNr, dbo.ApplikationKategorie.Bezeichnung FROM dbo.Applikation INNER JOIN dbo.ApplikationKategorie ON dbo.Applikation.ApplikationKategorieNr = dbo.ApplikationKategorie.ApplikationKategorieNr INNER JOIN dbo.#tmpd ON dbo.Applikation.ApplikationNr = dbo.#tmpd.applikationsnr open kc fetch next from kc into @knr, @bez while @@fetch_status=0 begin insert #tmpd(applikationsnr, bezeichnung, parentid, securitylevelnr, aktiv) values (@knr * -1, @bez, 0, 0, @aktiv) fetch next from kc into @knr, @bez end close kc deallocate kc ----------------------------------------------------------------------------------------- -- Daten zurück geben und temporäre Tabelle löschen ----------------------------------------------------------------------------------------- delete from #tmpd where kategorienr is null and parentid < 0 or applikationsnr is null --delete from #tmpd where kategorienr is null and (parentid 0 or parentid is null) insert #tmpd (applikationsnr, bezeichnung, parentid, aktiv) values(0,'Root',null,1) update #tmpd set lic=0 update #tmpd set lic=NurLizenz from applikation where #tmpd.applikationsnr=applikation.applikationnr update #tmpd set strukturelement=0 Update #tmpd set strukturelement=applikation.strukturelement from applikation where #tmpd.applikationsnr=applikation.applikationnr if @alphasort = 1 begin update #tmpd set parentid=0 where parentid<0 delete from #tmpd where applikationsnr < 0 if @nuraktive=0 begin select distinct applikationsnr, bezeichnung, parentid, lic, aktiv, strukturelement from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end else begin select distinct applikationsnr, bezeichnung, parentid, lic, aktiv, strukturelement from #tmpd where ltrim(bezeichnung) <> '' order by bezeichnung end --select distinct applikationsnr, bezeichnung, parentid, lic, aktiv from #tmpd order by bezeichnung drop table #tmpd return end if @nuraktive=0 begin select distinct applikationsnr, bezeichnung, parentid, lic, aktiv, strukturelement from #tmpd order by bezeichnung end else begin select distinct applikationsnr, bezeichnung, parentid, lic, aktiv, strukturelement from #tmpd order by bezeichnung -- select distinct applikationsnr, bezeichnung, parentid, lic, aktiv from #tmpd where aktiv=1 order by bezeichnung end drop table #tmpd GO