USE [BEA]
GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_split]    Script Date: 27.09.2013 20:11:31 ******/
DROP FUNCTION [dbo].[fnkt_split]
GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_get_Report_Data]    Script Date: 27.09.2013 20:11:31 ******/
DROP FUNCTION [dbo].[fnkt_get_Report_Data]
GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_get_mig_hierarchie]    Script Date: 27.09.2013 20:11:31 ******/
DROP FUNCTION [dbo].[fnkt_get_mig_hierarchie]
GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_get_hierarchie]    Script Date: 27.09.2013 20:11:31 ******/
DROP FUNCTION [dbo].[fnkt_get_hierarchie]
GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_funktionstelle_beziehung_reporting]    Script Date: 27.09.2013 20:11:31 ******/
DROP FUNCTION [dbo].[fnkt_funktionstelle_beziehung_reporting]
GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_funktionstelle_beziehung]    Script Date: 27.09.2013 20:11:31 ******/
DROP FUNCTION [dbo].[fnkt_funktionstelle_beziehung]
GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_funktionstelle_beziehung]    Script Date: 27.09.2013 20:11:31 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fnkt_funktionstelle_beziehung]
(	
	@keyvalue INT
)
RETURNS @tmp1 TABLE
(
  ID INT ,
  Bezeichnung VARCHAR(255) ,
  Beschreibung VARCHAR(255) ,
  Sequenz INT ,
  aktiv BIT ,
  erstellt_am DATETIME ,
  mutiert_am DATETIME ,
  mutierer INT ,
  typ VARCHAR(255) ,
  MKey INT,
  Beziehungstyp VARCHAR(255)
)   
AS
BEGIN

      INSERT    @tmp1 ( ID, Bezeichnung, Sequenz, beschreibung, aktiv, erstellt_am, mutiert_am, mutierer, typ, mkey,beziehungstyp )
                SELECT  dbo.Funktionstelle_Berechtigung.Funktionstelle_BerechtigungNr, dbo.Berechtigung.Bezeichnung, dbo.Funktionstelle_Berechtigung.Sequenz,
                        dbo.Funktionstelle_Berechtigung.Beschreibung, dbo.Funktionstelle_Berechtigung.Aktiv, dbo.Funktionstelle_Berechtigung.Erstellt_am,
                        dbo.Funktionstelle_Berechtigung.Mutiert_am, dbo.Funktionstelle_Berechtigung.Mutierer, dbo.fnkt_get_bezeichnung(0) AS Typ,
                        Funktionstelle_Berechtigung.BerechtigungNr, dbo.Beziehungstyp.Bezeichnung AS Beziehungstyp
                FROM    dbo.Funktionstelle
                        INNER JOIN dbo.Funktionstelle_Berechtigung ON dbo.Funktionstelle.FunktionstelleNr = dbo.Funktionstelle_Berechtigung.FunktionstelleNr
                        INNER JOIN dbo.Berechtigung ON dbo.Funktionstelle_Berechtigung.BerechtigungNr = dbo.Berechtigung.BerechtigungNr
                         INNER JOIN
                      dbo.Beziehungstyp ON dbo.Funktionstelle_Berechtigung.Beziehungstypnr = dbo.Beziehungstyp.BeziehungstypNr
               WHERE   ( dbo.Funktionstelle.FunktionstelleNr = @keyvalue ) --AND Funktionstelle_Berechtigung.aktiv=1


      INSERT    @tmp1 ( ID, Bezeichnung, Sequenz, beschreibung, aktiv, erstellt_am, mutiert_am, mutierer, typ, mkey,beziehungstyp )
                SELECT TOP ( 100 ) PERCENT
                        dbo.FunktionStelle_Plattform.FunktionStelle_PlattformNr, dbo.Plattform.Bezeichnung, dbo.FunktionStelle_Plattform.Sequenz,
                        dbo.FunktionStelle_Plattform.Beschreibung, dbo.FunktionStelle_Plattform.Aktiv, dbo.FunktionStelle_Plattform.Erstellt_am,
                        dbo.FunktionStelle_Plattform.Mutiert_am, dbo.FunktionStelle_Plattform.Mutierer, dbo.fnkt_get_bezeichnung(3) AS Typ,
                        FunktionStelle_Plattform.PlattformNr, dbo.Beziehungstyp.Bezeichnung AS Beziehungstyp
                FROM    dbo.Funktionstelle
                        INNER JOIN dbo.FunktionStelle_Plattform ON dbo.Funktionstelle.FunktionstelleNr = dbo.FunktionStelle_Plattform.FunktionStelleNr
                        INNER JOIN dbo.Plattform ON dbo.FunktionStelle_Plattform.PlattformNr = dbo.Plattform.PlattformNr
                        INNER JOIN
                      dbo.Beziehungstyp ON dbo.FunktionStelle_Plattform.Beziehungstypnr = dbo.Beziehungstyp.BeziehungstypNr
                WHERE   ( dbo.Funktionstelle.FunktionstelleNr = @keyvalue ) --AND FunktionStelle_Plattform.Aktiv=1

 
      INSERT    @tmp1 ( ID, Bezeichnung, Sequenz, beschreibung, aktiv, erstellt_am, mutiert_am, mutierer, typ, mkey,beziehungstyp )
                SELECT TOP ( 100 ) PERCENT
                        dbo.FunktionStelle_Server.FunktionStelle_ServerNr, dbo.Server.Bezeichnung, dbo.FunktionStelle_Server.Sequenz,
                        dbo.FunktionStelle_Server.Beschreibung, dbo.FunktionStelle_Server.Aktiv, dbo.FunktionStelle_Server.Erstellt_am,
                        dbo.FunktionStelle_Server.Mutiert_am, dbo.FunktionStelle_Server.Mutierer, dbo.fnkt_get_bezeichnung(4) AS Typ,
                        Funktionstelle_Server.ServerNr, dbo.Beziehungstyp.Bezeichnung AS Beziehungstyp
                FROM    dbo.Funktionstelle
                        INNER JOIN dbo.FunktionStelle_Server ON dbo.Funktionstelle.FunktionstelleNr = dbo.FunktionStelle_Server.FunktionStelleNr
                        INNER JOIN dbo.Server ON dbo.FunktionStelle_Server.ServerNr = dbo.Server.ServerNr
                        INNER JOIN
                      dbo.Beziehungstyp ON dbo.FunktionStelle_Server.Beziehungstypnr = dbo.Beziehungstyp.BeziehungstypNr
                WHERE   ( dbo.Funktionstelle.FunktionstelleNr = @keyvalue ) --AND Funktionstelle_Server.Aktiv=1

 
      INSERT    @tmp1 ( ID, Bezeichnung, Sequenz, beschreibung, aktiv, erstellt_am, mutiert_am, mutierer, typ, mkey,beziehungstyp )
                SELECT  dbo.Personal_FunktionStelle.Personal_FunktionStelleNr, dbo.Personal.TGNummer + ' ' + dbo.Personal.Name AS Bezeichnung,
                        dbo.Personal_FunktionStelle.Sequenz, dbo.Personal_FunktionStelle.Beschreibung, dbo.Personal_FunktionStelle.Aktiv,
                        dbo.Personal_FunktionStelle.Erstellt_am, dbo.Personal_FunktionStelle.Mutiert_am, dbo.Personal_FunktionStelle.Mutierer,
                        dbo.fnkt_get_bezeichnung(2) AS TYP, dbo.Personal.Personalnr AS MKEY, dbo.Beziehungstyp.Bezeichnung AS Beziehungstyp
                FROM    dbo.Personal_FunktionStelle
                        INNER JOIN dbo.Personal ON dbo.Personal_FunktionStelle.PersonalNr = dbo.Personal.Personalnr
                        INNER JOIN dbo.Funktionstelle ON dbo.Personal_FunktionStelle.FunktionStelleNr = dbo.Funktionstelle.FunktionstelleNr
                        INNER JOIN
                      dbo.Beziehungstyp ON dbo.Personal_FunktionStelle.Beziehungstypnr = dbo.Beziehungstyp.BeziehungstypNr
                WHERE   ( dbo.Funktionstelle.FunktionstelleNr = @keyvalue ) --AND dbo.Personal_FunktionStelle.Aktiv=1
   RETURN
   
END

GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_funktionstelle_beziehung_reporting]    Script Date: 27.09.2013 20:11:31 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
Create FUNCTION [dbo].[fnkt_funktionstelle_beziehung_reporting]
(	
	@keyvalue INT
)
RETURNS @tmp1 TABLE
(
  ID INT ,
  Bezeichnung VARCHAR(255) ,
  Beschreibung VARCHAR(255) ,
  Sequenz INT ,
  aktiv BIT ,
  erstellt_am DATETIME ,
  mutiert_am DATETIME ,
  mutierer INT ,
  typ VARCHAR(255) ,
  MKey INT,
  Beziehungstyp VARCHAR(255)
)   
AS
BEGIN

      INSERT    @tmp1 ( ID, Bezeichnung, Sequenz, beschreibung, aktiv, erstellt_am, mutiert_am, mutierer, typ, mkey,beziehungstyp )
                SELECT  dbo.Funktionstelle_Berechtigung.Funktionstelle_BerechtigungNr, dbo.Berechtigung.Bezeichnung, dbo.Funktionstelle_Berechtigung.Sequenz,
                        dbo.Funktionstelle_Berechtigung.Beschreibung, dbo.Funktionstelle_Berechtigung.Aktiv, dbo.Funktionstelle_Berechtigung.Erstellt_am,
                        dbo.Funktionstelle_Berechtigung.Mutiert_am, dbo.Funktionstelle_Berechtigung.Mutierer, dbo.fnkt_get_bezeichnung(0) AS Typ,
                        Funktionstelle_Berechtigung.BerechtigungNr, dbo.Beziehungstyp.Bezeichnung AS Beziehungstyp
                FROM    dbo.Funktionstelle
                        INNER JOIN dbo.Funktionstelle_Berechtigung ON dbo.Funktionstelle.FunktionstelleNr = dbo.Funktionstelle_Berechtigung.FunktionstelleNr
                        INNER JOIN dbo.Berechtigung ON dbo.Funktionstelle_Berechtigung.BerechtigungNr = dbo.Berechtigung.BerechtigungNr
                         INNER JOIN
                      dbo.Beziehungstyp ON dbo.Funktionstelle_Berechtigung.Beziehungstypnr = dbo.Beziehungstyp.BeziehungstypNr
               WHERE   ( dbo.Funktionstelle.FunktionstelleNr = @keyvalue ) AND Funktionstelle_Berechtigung.aktiv=1


      INSERT    @tmp1 ( ID, Bezeichnung, Sequenz, beschreibung, aktiv, erstellt_am, mutiert_am, mutierer, typ, mkey,beziehungstyp )
                SELECT TOP ( 100 ) PERCENT
                        dbo.FunktionStelle_Plattform.FunktionStelle_PlattformNr, dbo.Plattform.Bezeichnung, dbo.FunktionStelle_Plattform.Sequenz,
                        dbo.FunktionStelle_Plattform.Beschreibung, dbo.FunktionStelle_Plattform.Aktiv, dbo.FunktionStelle_Plattform.Erstellt_am,
                        dbo.FunktionStelle_Plattform.Mutiert_am, dbo.FunktionStelle_Plattform.Mutierer, dbo.fnkt_get_bezeichnung(3) AS Typ,
                        FunktionStelle_Plattform.PlattformNr, dbo.Beziehungstyp.Bezeichnung AS Beziehungstyp
                FROM    dbo.Funktionstelle
                        INNER JOIN dbo.FunktionStelle_Plattform ON dbo.Funktionstelle.FunktionstelleNr = dbo.FunktionStelle_Plattform.FunktionStelleNr
                        INNER JOIN dbo.Plattform ON dbo.FunktionStelle_Plattform.PlattformNr = dbo.Plattform.PlattformNr
                        INNER JOIN
                      dbo.Beziehungstyp ON dbo.FunktionStelle_Plattform.Beziehungstypnr = dbo.Beziehungstyp.BeziehungstypNr
                WHERE   ( dbo.Funktionstelle.FunktionstelleNr = @keyvalue ) AND FunktionStelle_Plattform.Aktiv=1

 
      INSERT    @tmp1 ( ID, Bezeichnung, Sequenz, beschreibung, aktiv, erstellt_am, mutiert_am, mutierer, typ, mkey,beziehungstyp )
                SELECT TOP ( 100 ) PERCENT
                        dbo.FunktionStelle_Server.FunktionStelle_ServerNr, dbo.Server.Bezeichnung, dbo.FunktionStelle_Server.Sequenz,
                        dbo.FunktionStelle_Server.Beschreibung, dbo.FunktionStelle_Server.Aktiv, dbo.FunktionStelle_Server.Erstellt_am,
                        dbo.FunktionStelle_Server.Mutiert_am, dbo.FunktionStelle_Server.Mutierer, dbo.fnkt_get_bezeichnung(4) AS Typ,
                        Funktionstelle_Server.ServerNr, dbo.Beziehungstyp.Bezeichnung AS Beziehungstyp
                FROM    dbo.Funktionstelle
                        INNER JOIN dbo.FunktionStelle_Server ON dbo.Funktionstelle.FunktionstelleNr = dbo.FunktionStelle_Server.FunktionStelleNr
                        INNER JOIN dbo.Server ON dbo.FunktionStelle_Server.ServerNr = dbo.Server.ServerNr
                        INNER JOIN
                      dbo.Beziehungstyp ON dbo.FunktionStelle_Server.Beziehungstypnr = dbo.Beziehungstyp.BeziehungstypNr
                WHERE   ( dbo.Funktionstelle.FunktionstelleNr = @keyvalue ) AND Funktionstelle_Server.Aktiv=1

 
      INSERT    @tmp1 ( ID, Bezeichnung, Sequenz, beschreibung, aktiv, erstellt_am, mutiert_am, mutierer, typ, mkey,beziehungstyp )
                SELECT  dbo.Personal_FunktionStelle.Personal_FunktionStelleNr, dbo.Personal.TGNummer + ' ' + dbo.Personal.Name AS Bezeichnung,
                        dbo.Personal_FunktionStelle.Sequenz, dbo.Personal_FunktionStelle.Beschreibung, dbo.Personal_FunktionStelle.Aktiv,
                        dbo.Personal_FunktionStelle.Erstellt_am, dbo.Personal_FunktionStelle.Mutiert_am, dbo.Personal_FunktionStelle.Mutierer,
                        dbo.fnkt_get_bezeichnung(2) AS TYP, dbo.Personal.Personalnr AS MKEY, dbo.Beziehungstyp.Bezeichnung AS Beziehungstyp
                FROM    dbo.Personal_FunktionStelle
                        INNER JOIN dbo.Personal ON dbo.Personal_FunktionStelle.PersonalNr = dbo.Personal.Personalnr
                        INNER JOIN dbo.Funktionstelle ON dbo.Personal_FunktionStelle.FunktionStelleNr = dbo.Funktionstelle.FunktionstelleNr
                        INNER JOIN
                      dbo.Beziehungstyp ON dbo.Personal_FunktionStelle.Beziehungstypnr = dbo.Beziehungstyp.BeziehungstypNr
                WHERE   ( dbo.Funktionstelle.FunktionstelleNr = @keyvalue ) AND dbo.Personal_FunktionStelle.Aktiv=1
   RETURN
   
END

GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_get_hierarchie]    Script Date: 27.09.2013 20:11:31 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fnkt_get_hierarchie]
(	
	@startkey int
)
RETURNS  @tmp1 TABLE
(
  ID INT ,
  Bezeichnung VARCHAR(255) ,
  parentid INT,
  LEVel INT
)     
AS
begin

     DECLARE @i INT
     SET @i=0
	DECLARE @pid INT
	--INSERT @tmp1 (id, Bezeichnung, parentid,level)  SELECT plattformnr, bezeichnung, parentid,@i FROM dbo.Plattform WHERE plattformnr=@startkey
	SET @pid=@startkey
	WHILE @pid>0 BEGIN
	   SET @i=@i+1
	   INSERT @tmp1 (id, Bezeichnung, parentid,level)  SELECT plattformnr, bezeichnung, parentid,@i FROM dbo.Plattform WHERE plattformnr=@pid
	   SELECT @pid=parentid FROM dbo.Plattform WHERE plattformnr=@pid
   
	END
     INSERT @tmp1 (id, Bezeichnung, parentid,level)  SELECT plattformnr, bezeichnung, parentid,@i FROM dbo.Plattform WHERE plattformnr=@pid
     SELECT @pid=plattformnr FROM dbo.Plattform WHERE plattformnr=@pid

     RETURN	
end	
	

GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_get_mig_hierarchie]    Script Date: 27.09.2013 20:11:31 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fnkt_get_mig_hierarchie]
(	
	@startkey int
)
RETURNS  @tmp1 TABLE
(
  
	[Parent] [int] NULL,
	[Parent_Bezeichnung] [nvarchar](50) NULL,
	[Parent_Typ] [nvarchar](50) NULL,
	[Sequenz] [int] NULL,
	[ID] [int] NULL,
	[Bezeichnung] [nvarchar](50) NULL,
	[Typ] [nvarchar](50) NULL,
	[TypNr] [int] NULL,
	[Typ_Bezeichung] [nvarchar](50) NULL,
	LEVEL int

)     
AS
begin

     DECLARE @i INT
     SET @i=1
	DECLARE @pid INT
	DECLARE @rc INT
	
	INSERT @tmp1 SELECT *,1 FROM dbo.BAA_SHU_Extrakt_Beziehungen WHERE id=@startkey AND typnr=-1
	SELECT @pid = parent FROM dbo.BAA_SHU_Extrakt_Beziehungen WHERE id=@startkey AND typnr=-1
	WHILE @pid>0 BEGIN
	   SET @i=@i+1
	   SELECT @rc=COUNT(*) FROM dbo.BAA_SHU_Extrakt_Beziehungen WHERE id=@pid AND typnr=-1
	   IF @rc>0 BEGIN
	      INSERT @tmp1 SELECT *, @i FROM dbo.BAA_SHU_Extrakt_Beziehungen WHERE id=@pid   AND typnr=-1
	      SELECT @pid=parent FROM dbo.BAA_SHU_Extrakt_Beziehungen WHERE id=@pid  AND typnr=-1
	   END ELSE BEGIN
	      SET @pid=0
	   end   
	end   
     RETURN	
end	
	

GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_get_Report_Data]    Script Date: 27.09.2013 20:11:31 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fnkt_get_Report_Data]
(
	@ifnr int
)
RETURNS 
@t1 TABLE 
(
  funktionsnummer VARCHAR(255) ,
  funktionsbezeichnung VARCHAR(255) ,
  plattform VARCHAR(255) ,
  verwaltungmit VARCHAR(255) ,
  verwaltungdurch VARCHAR(255) ,
  berechtigungIn VARCHAR(255) ,
  berechtigungfuer VARCHAR(255) ,
  eigentuemer VARCHAR(255)
)
AS
BEGIN
 DECLARE @fstelle VARCHAR(255)
      DECLARE @fnr INT
      DECLARE @fbezeichnung VARCHAR(255)
      DECLARE @fnummer VARCHAR(255)
      DECLARE @parent INT 
      
      DECLARE @tmp1 TABLE
(
  ID INT ,
  Bezeichnung VARCHAR(255) ,
  Beschreibung VARCHAR(255) ,
  Sequenz INT ,
  aktiv BIT ,
  erstellt_am DATETIME ,
  mutiert_am DATETIME ,
  mutierer INT ,
  typ VARCHAR(255) ,
  MKey INT,
  Berechtigungstyp VARCHAR(255)
)   

      SELECT TOP 1
                @fnr = FunktionstelleNr, @fbezeichnung = bezeichnung, @fstelle = funktionsstelle, @fnummer = Funktionsstelle, @parent = ParentID
      FROM      funktionstelle
      WHERE     funktionstellenr = @ifnr


      INSERT    @tmp1
                SELECT  *
                FROM    dbo.fnkt_funktionstelle_beziehung_reporting(@fnr)
      
      DELETE    FROM @tmp1
      WHERE     typ <> 'Berechtigung'
                AND typ <> 'Plattform'

      
      DECLARE @bez VARCHAR(255)
      DECLARE @key INT
      DECLARE @typ VARCHAR(255)
      DECLARE @key1 INT
      DECLARE @bez1 VARCHAR(255)
	  DECLARE @btyp VARCHAR(255)
      DECLARE @skey int
      DECLARE @funktionsnummer VARCHAR(255) ,
              @funktionsbezeichnung VARCHAR(255) ,
              @verwaltungdurch VARCHAR(255) ,
              @plattform VARCHAR(255) ,
              @verwaltungmit VARCHAR(255) ,
              @berechtigungIn VARCHAR(255) ,
              @berechtigungfuer VARCHAR(255) ,
              @eigentuemer VARCHAR(255)
      
      DECLARE xc CURSOR
      FOR
      SELECT    bezeichnung, mkey, TYP, Berechtigungstyp
      FROM      @tmp1
      OPEN xc
      FETCH NEXT FROM xc INTO @bez, @key, @typ, @btyp
      WHILE @@FETCH_STATUS = 0 
            BEGIN
                  SET @funktionsnummer = @fnummer
                  SET @funktionsbezeichnung = @fbezeichnung
                  SET @berechtigungfuer = @fbezeichnung

				  -- Rollenberechtigung
				  IF UPPER(@typ) = 'BERECHTIGUNG' AND UPPER(@btyp) = 'ROLLENBERECHTIGUNG' BEGIN
                           DECLARE xx CURSOR FOR 
						      SELECT plattformnr FROM dbo.Berechtigung_Plattform WHERE BerechtigungNr=@key
						   OPEN xx
						   FETCH NEXT FROM xx INTO @key	                  
						   WHILE @@FETCH_STATUS=0 begin
                           SELECT TOP 1
                                    @plattform = bezeichnung
                           FROM     dbo.fnkt_get_hierarchie(@key)
                           WHERE    level > 0
                           ORDER BY LEVEL DESC 
                           
                           SELECT TOP 1
                                    @berechtigungfuer = bezeichnung
                           FROM     dbo.fnkt_get_hierarchie(@key)
                           WHERE    level = 1
                           SELECT TOP 1
                                    @berechtigungin = bezeichnung
                           FROM     dbo.fnkt_get_hierarchie(@key)
                           WHERE parentid > 0 ORDER BY level desc         
                           IF @@ROWCOUNT = 0 
                              SET @berechtigungin = @berechtigungfuer
                              
                           DECLARE xa CURSOR
                           FOR
                           SELECT   dbo.Verwaltung_durch_Plattform.Verwaltung_durch_plattformNr
                           FROM     dbo.Verwaltung_durch_Plattform
                           WHERE    aktiv = 1
                                    AND plattformnr = @key
                           OPEN xa
                           FETCH NEXT FROM xa INTO @key1   
                           WHILE @@fetch_status = 0 
                                 BEGIN
                                       SELECT   @verwaltungdurch = dbo.Verwaltung_durch.Bezeichnung
                                       FROM     dbo.Verwaltung_durch_Plattform
                                                INNER JOIN dbo.Verwaltung_durch ON dbo.Verwaltung_durch_Plattform.Verwaltung_DurchNr = dbo.Verwaltung_durch.Verwaltung_durchNr
                                       WHERE    Verwaltung_Durch_PlattformNr=@key1

                                       SELECT   @verwaltungmit = dbo.Verwaltung_mit.Bezeichnung
                                       FROM     dbo.Verwaltung_Mit_Plattform
                                                INNER JOIN dbo.Verwaltung_mit ON dbo.Verwaltung_Mit_Plattform.Verwaltung_MitNr = dbo.Verwaltung_mit.Verwaltung_mitNr
                                       WHERE    PlattformNr = @key   

                                       SELECT   @eigentuemer = ISNULL(dbo.Personal.TGNummer + ' ' + dbo.Personal.Name,'')
                                       FROM     dbo.Personal_Plattform
                                                INNER JOIN dbo.Personal ON dbo.Personal_Plattform.PersonalNr = dbo.Personal.Personalnr
                                       WHERE    plattformnr = @key AND (dbo.Personal_Plattform.beziehungstypnr=-31 OR  dbo.Personal_Plattform.beziehungstypnr=-30)
                                       IF @@ROWCOUNT=0 SET @eigentuemer=''
                                                            
                                       INSERT   @t1 ( funktionsnummer, funktionsbezeichnung, plattform, verwaltungmit, verwaltungdurch, berechtigungIn,
                                                      berechtigungfuer, eigentuemer )
                                       VALUES   ( @funktionsnummer, @funktionsbezeichnung, @plattform, @verwaltungmit, @verwaltungdurch, @berechtigungIn,
                                                  @berechtigungfuer, @eigentuemer )
                                                  
                                       FETCH NEXT FROM xa INTO @key1   
                                 END
                           CLOSE xa
                           DEALLOCATE xa   
						   						   FETCH NEXT FROM xx INTO @key	                  
END
CLOSE xx 
DEALLOCATE xx
                     END



                  IF UPPER(@typ) = 'BERECHTIGUNG' AND UPPER(@btyp) <> 'ROLLENBERECHTIGUNG'
                     BEGIN
                           SELECT   @key1 = ParentID, @berechtigungfuer = bezeichnung
                           FROM     dbo.Berechtigung
                           WHERE    berechtigungnr = @key
                           
                           SELECT   @key1 = ParentID, @berechtigungIn = bezeichnung
                           FROM     dbo.Berechtigung
                           WHERE    berechtigungnr = @key1

                           SELECT   @plattform = bezeichnung
                           FROM     dbo.Berechtigung
                           WHERE    Berechtigungnr = @key1
                           
                           SELECT   @verwaltungdurch = dbo.Verwaltung_durch.Bezeichnung
                           FROM     dbo.Verwaltung_durch_Berechtigung
                                    INNER JOIN dbo.Verwaltung_durch ON dbo.Verwaltung_durch_Berechtigung.Verwaltung_DurchNr = dbo.Verwaltung_durch.Verwaltung_durchNr
                           WHERE    BerechtigungNr = @key
                           
                           SELECT   @verwaltungmit = dbo.Verwaltung_mit.Bezeichnung
                           FROM     dbo.Verwaltung_Mit_Berechtigung
                                    INNER JOIN dbo.Verwaltung_mit ON dbo.Verwaltung_Mit_Berechtigung.Verwaltung_MitNr = dbo.Verwaltung_mit.Verwaltung_mitNr
                           WHERE    Berechtigungnr = @key   

					  SET @eigentuemer=''
                           SELECT   @eigentuemer = ISNULL(dbo.Personal.TGNummer + ' ' + dbo.Personal.Name,'')
                           FROM     dbo.Personal_berechtigung
                                    INNER JOIN dbo.Personal ON dbo.Personal_berechtigung.PersonalNr = dbo.Personal.Personalnr
                           WHERE    berechtigungnr = @key AND (dbo.Personal_Berechtigung.beziehungstypnr=-31 OR  dbo.Personal_Berechtigung.beziehungstypnr=-30)
                           IF @@ROWCOUNT = 0 SET @eigentuemer=''
                     END
         
                  IF UPPER(@typ) = 'PLATTFORM' 
                     BEGIN
                           SELECT TOP 1
                                    @plattform = bezeichnung
                           FROM     dbo.fnkt_get_hierarchie(@key)
                           WHERE    level > 0
                           ORDER BY LEVEL DESC 
                           
                           SELECT TOP 1
                                    @berechtigungfuer = bezeichnung
                           FROM     dbo.fnkt_get_hierarchie(@key)
                           WHERE    level = 1
                           SELECT TOP 1
                                    @berechtigungin = bezeichnung
                           FROM     dbo.fnkt_get_hierarchie(@key)
                           WHERE parentid > 0 ORDER BY level desc         
                           IF @@ROWCOUNT = 0 
                              SET @berechtigungin = @berechtigungfuer
                              
                           DECLARE xa CURSOR
                           FOR
                           SELECT   dbo.Verwaltung_durch_Plattform.Verwaltung_durch_plattformNr
                           FROM     dbo.Verwaltung_durch_Plattform
                           WHERE    aktiv = 1
                                    AND plattformnr = @key
                           OPEN xa
                           FETCH NEXT FROM xa INTO @key1   
                           WHILE @@fetch_status = 0 
                                 BEGIN
                                       SELECT   @verwaltungdurch = dbo.Verwaltung_durch.Bezeichnung
                                       FROM     dbo.Verwaltung_durch_Plattform
                                                INNER JOIN dbo.Verwaltung_durch ON dbo.Verwaltung_durch_Plattform.Verwaltung_DurchNr = dbo.Verwaltung_durch.Verwaltung_durchNr
                                       WHERE    Verwaltung_Durch_PlattformNr=@key1

                                       SELECT   @verwaltungmit = dbo.Verwaltung_mit.Bezeichnung
                                       FROM     dbo.Verwaltung_Mit_Plattform
                                                INNER JOIN dbo.Verwaltung_mit ON dbo.Verwaltung_Mit_Plattform.Verwaltung_MitNr = dbo.Verwaltung_mit.Verwaltung_mitNr
                                       WHERE    PlattformNr = @key   

                                       SELECT   @eigentuemer = ISNULL(dbo.Personal.TGNummer + ' ' + dbo.Personal.Name,'')
                                       FROM     dbo.Personal_Plattform
                                                INNER JOIN dbo.Personal ON dbo.Personal_Plattform.PersonalNr = dbo.Personal.Personalnr
                                       WHERE    plattformnr = @key AND (dbo.Personal_Plattform.beziehungstypnr=-31 OR  dbo.Personal_Plattform.beziehungstypnr=-30)
                                       IF @@ROWCOUNT=0 SET @eigentuemer=''
                                                            
                                       INSERT   @t1 ( funktionsnummer, funktionsbezeichnung, plattform, verwaltungmit, verwaltungdurch, berechtigungIn,
                                                      berechtigungfuer, eigentuemer )
                                       VALUES   ( @funktionsnummer, @funktionsbezeichnung, @plattform, @verwaltungmit, @verwaltungdurch, @berechtigungIn,
                                                  @berechtigungfuer, @eigentuemer )
                                                  
                                       FETCH NEXT FROM xa INTO @key1   
                                 END
                           CLOSE xa
                           DEALLOCATE xa   
                     END
                     
                  IF UPPER(@typ) = 'ORGANISATION' 
                     BEGIN
                           SELECT   @key1 = ParentID, @berechtigungfuer = bezeichnung
                           FROM     dbo.Funktionstelle
                           WHERE    Funktionstellenr = @key
                           
                           SELECT   @key1 = ParentID, @berechtigungIn = bezeichnung
                           FROM     dbo.Funktionstelle
                           WHERE    Funktionstellenr = @key1

                           SELECT   @plattform = bezeichnung
                           FROM     dbo.Funktionstelle
                           WHERE    funktionstellenr = @key1
                           
                              
                           SELECT   @verwaltungdurch = dbo.Verwaltung_durch.Bezeichnung
                           FROM     dbo.Verwaltung_durch_Plattform
                                    INNER JOIN dbo.Verwaltung_durch ON dbo.Verwaltung_durch_Plattform.Verwaltung_DurchNr = dbo.Verwaltung_durch.Verwaltung_durchNr
                           WHERE    PlattformNr = @key
                   
                           SET @verwaltungmit = ''
                           SET @verwaltungdurch = ''
                   
                           --SELECT   @verwaltungmit = dbo.Verwaltung_mit.Bezeichnung
                           --FROM     dbo.Verwaltung_Mit_Plattform
                           --         INNER JOIN dbo.Verwaltung_mit ON dbo.Verwaltung_Mit_Plattform.Verwaltung_MitNr = dbo.Verwaltung_mit.Verwaltung_mitNr
                           --WHERE    PlattformNr = @key   

                           --SELECT   @eigentuemer = dbo.Personal.TGNummer + ' ' + dbo.Personal.Name
                           --FROM     dbo.Personal_Plattform
                           --         INNER JOIN dbo.Personal ON dbo.Personal_Plattform.PersonalNr = dbo.Personal.Personalnr
                           --WHERE    plattformnr = @key
                           
                     END
                  INSERT    @t1 ( funktionsnummer, funktionsbezeichnung, plattform, verwaltungmit, verwaltungdurch, berechtigungIn, berechtigungfuer,
                                  eigentuemer )
                  VALUES    ( @funktionsnummer, @funktionsbezeichnung, @plattform, @verwaltungmit, @verwaltungdurch, @berechtigungIn, @berechtigungfuer,
                              @eigentuemer )
      
                  FETCH NEXT FROM xc INTO @bez, @key, @typ, @btyp
            END   
      INSERT    @t1 ( funktionsnummer, funktionsbezeichnung, plattform, verwaltungmit, verwaltungdurch, berechtigungIn, berechtigungfuer, eigentuemer )
      VALUES    ( @funktionsnummer, @funktionsbezeichnung, @plattform, @verwaltungmit, @verwaltungdurch, @berechtigungIn, @berechtigungfuer, @eigentuemer )
                              
                 
           
      CLOSE xc
      DEALLOCATE xc
	
	RETURN 
END

GO

/****** Object:  UserDefinedFunction [dbo].[fnkt_split]    Script Date: 27.09.2013 20:11:31 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
CREATE FUNCTION [dbo].[fnkt_split] 
(	
  @sInputList varchar(8000) -- List of delimited items
  , @Delimiter char(2) = ',' -- delimiter that separates items
  , @Delimiterlength INT = 1

)
RETURNS @tmp1 TABLE (item varchar(8000))
 
AS
begin

DECLARE @Item VARCHAR(8000)

WHILE CHARINDEX(@Delimiter, @sInputList, 0) <> 0 
      BEGIN
            SELECT  @Item = RTRIM(LTRIM(SUBSTRING(@sInputList, 1, CHARINDEX(@Delimiter, @sInputList, 0) - 1))),
                    @sInputList = RTRIM(LTRIM(SUBSTRING(@sInputList, CHARINDEX(@Delimiter, @sInputList, 0) + @Delimiterlength, LEN(@sInputList))))
            IF LEN(@Item) > 0 
               INSERT   INTO @tmp1
                        SELECT  @Item
      END
      
IF LEN(@sInputList) > 0 
   INSERT   INTO @tmp1
            SELECT  @sInputList

RETURN

end

GO

