UFN_EVENTLOCATION_ASSOCIATEDCATEGORYCODES

Return

Return Type
xml

Parameters

Parameter Parameter Type Mode Description
@EVENTLOCATIONID uniqueidentifier IN

Definition

Copy


create function dbo.UFN_EVENTLOCATION_ASSOCIATEDCATEGORYCODES
(
    @EVENTLOCATIONID uniqueidentifier = null
)
returns xml
with execute as caller
as begin

declare @TEMP table (CATEGORYCODEID uniqueidentifier);
if (@EVENTLOCATIONID is null)
    begin
        insert into @TEMP (CATEGORYCODEID)
        (
            select
                CODES.CATEGORYCODE
            from
            (
                select
                    E.EVENTCATEGORYCODEID as CATEGORYCODE
                from
                    dbo.EVENT E
                where
                    E.EVENTLOCATIONID is null and
                    E.EVENTCATEGORYCODEID is not null

                union all

                select
                    P.PROGRAMCATEGORYCODEID as CATEGORYCODE
                from
                    dbo.PROGRAM P
                inner join
                    dbo.EVENT E on E.PROGRAMID = P.ID
                left join
                    dbo.PROGRAMEVENTLOCATION PL on PL.EVENTID = E.ID
                where
                    PL.EVENTLOCATIONID is null and
                    P.PROGRAMCATEGORYCODEID is not null
            ) as CODES
        );

        if exists(select 1 from dbo.EVENT E where E.EVENTLOCATIONID is null and E.EVENTCATEGORYCODEID is null
        or exists(select 1 from dbo.PROGRAM P inner join dbo.EVENT E on E.PROGRAMID = P.ID inner join dbo.PROGRAMEVENTLOCATION PL on PL.EVENTID = E.ID where P.PROGRAMCATEGORYCODEID is null and PL.EVENTLOCATIONID is null)
        begin
            insert into @TEMP(CATEGORYCODEID)
            select '00000000-0000-0000-0000-000000000000'
        end
    end
else
    begin
        insert into @TEMP (CATEGORYCODEID)
        (
            select
                CODES.CATEGORYCODE
            from
            (
                select
                    E.EVENTCATEGORYCODEID as CATEGORYCODE
                from
                    dbo.EVENT E
                where
                    E.EVENTLOCATIONID = @EVENTLOCATIONID and
                    E.EVENTCATEGORYCODEID is not null

                union all

                select
                    P.PROGRAMCATEGORYCODEID as CATEGORYCODE
                from
                    dbo.PROGRAM P
                inner join
                    dbo.EVENT E on E.PROGRAMID = P.ID
                inner join
                    dbo.PROGRAMEVENTLOCATION PL on PL.EVENTID = E.ID
                where
                    PL.EVENTLOCATIONID = @EVENTLOCATIONID and
                    P.PROGRAMCATEGORYCODEID is not null
            ) as CODES
        )

        if exists(select 1 from dbo.EVENT E where E.EVENTLOCATIONID = @EVENTLOCATIONID and E.EVENTCATEGORYCODEID is null
        or exists(select 1 from dbo.PROGRAM P inner join dbo.EVENT E on E.PROGRAMID = P.ID inner join dbo.PROGRAMEVENTLOCATION PL on PL.EVENTID = E.ID where P.PROGRAMCATEGORYCODEID is null and PL.EVENTLOCATIONID = @EVENTLOCATIONID)
        begin
            insert into @TEMP(CATEGORYCODEID)
            select '00000000-0000-0000-0000-000000000000'
        end
    end

return
    (
        select distinct
            CODES.CATEGORYCODEID
        from
            @TEMP CODES
        for xml raw('ITEM'),type,elements,root('CATEGORYCODES'),BINARY BASE64
    )
end