UFN_BATCHTEMPLATE_GETORIGINATINGTEMPLATENAME

Return

Return Type
nvarchar(60)

Parameters

Parameter Parameter Type Mode Description
@BATCHTEMPLATEID uniqueidentifier IN

Definition

Copy


                create function dbo.UFN_BATCHTEMPLATE_GETORIGINATINGTEMPLATENAME(
                    @BATCHTEMPLATEID uniqueidentifier
                ) 
                returns nvarchar(60) with execute as caller
                as
                begin

                declare @BATCHTEMPLATENAME as nvarchar(60);

                with BATCHTEMPLATECHAIN (ID, LINKNUMBER, BATCHTEMPLATENAME, PARENTID) as (
                    --this CTE builds the chain...

                    select
                        BATCHTEMPLATE.ID,
                        0 as LINKNUMBER,
                        BATCHTEMPLATE.NAME as BATCHTEMPLATENAME,
                        BATCHTEMPLATE.ORIGINATINGTEMPLATEID as PARENTID
                    from dbo.BATCHTEMPLATE
                        where 
                        BATCHTEMPLATE.ID = @BATCHTEMPLATEID
                    union all
                    select
                        BATCHTEMPLATECHAIN.ID,
                        BATCHTEMPLATECHAIN.LINKNUMBER + 1 as LINKNUMBER,
                        BATCHTEMPLATE.NAME as BATCHTEMPLATENAME,
                        BATCHTEMPLATE.ORIGINATINGTEMPLATEID as PARENTID
                    from BATCHTEMPLATECHAIN
                    inner join dbo.BATCHTEMPLATE on BATCHTEMPLATE.ID = BATCHTEMPLATECHAIN.PARENTID
                ), BATCHTEMPLATECHAINMAXLINK (ID, MAXLINKNUMBER) as (
                -- ...this CTE finds the last link in the chain...

                    select
                        BATCHTEMPLATECHAIN.ID,
                        max(BATCHTEMPLATECHAIN.LINKNUMBER) as MAXLINKNUMBER
                    from BATCHTEMPLATECHAIN
                    group by BATCHTEMPLATECHAIN.ID
                ), ULTIMATEBATCHTEMPLATE (ID, BATCHTEMPLATENAME) as (
                -- ...and this CTE reveals the ID and name of the last link in the chain

                    select
                        BATCHTEMPLATECHAIN.ID,
                        BATCHTEMPLATECHAIN.BATCHTEMPLATENAME
                    from BATCHTEMPLATECHAIN
                    inner join BATCHTEMPLATECHAINMAXLINK on BATCHTEMPLATECHAINMAXLINK.ID = BATCHTEMPLATECHAIN.ID and BATCHTEMPLATECHAINMAXLINK.MAXLINKNUMBER = BATCHTEMPLATECHAIN.LINKNUMBER
                )
                select
                    @BATCHTEMPLATENAME = ULTIMATEBATCHTEMPLATE.BATCHTEMPLATENAME
                from ULTIMATEBATCHTEMPLATE;

                return @BATCHTEMPLATENAME;

                end