SQL scalar function: Util dbo SPParamDefault, Created: Jan 7 2012 6:33PM, Modified: Apr 17 2012 6:38AM

CREATE FUNCTION dbo.SPParamDefault (@Procname SYSNAME
                                 , @ProcParamName SYSNAME
                                 , @is_output BIT
                                 , @ProcDefinition VARCHAR(8000))
RETURNS VARCHAR(MAX)
    WITH RETURNS NULL ON NULL INPUT
AS 
BEGIN
    DECLARE @DefaultValue VARCHAR(MAX)
      , @startPos INT
      , @endPos INT

    SELECT  @ProcDefinition = LTRIM(RTRIM(REPLACE(REPLACE(@ProcDefinition, '  ', ' '), '    ', ' ')))
          , @Procname = RTRIM(LTRIM(@Procname))
    SET @startPos = CHARINDEX(';', @Procname)

    IF @startPos <> 0 
        SET @Procname = LEFT(@Procname, LEN(@Procname) - 2)
    SET @startPos = PATINDEX('%' + @ProcParamName + ' %', @ProcDefinition)
    IF @startPos <> 0 
        BEGIN
            SET @ProcDefinition = RIGHT(@ProcDefinition, LEN(@ProcDefinition) - (@startPos - 1))
            SET @endPos = CHARINDEX(CHAR(10), @ProcDefinition) -- find the end of a line

            SET @ProcDefinition = LEFT(@ProcDefinition, @endPos - 1)
            -- check if there is a default assigned and

            -- parse the value to theoutput

            SET @startPos = PATINDEX('%=%', @ProcDefinition)
            IF @startPos <> 0 
                BEGIN
                    SET @DefaultValue = LTRIM(RTRIM(RIGHT(@ProcDefinition, LEN(@ProcDefinition) - (@startPos))))
                    SET @endPos = CHARINDEX('--', @DefaultValue)
                    IF @endPos <> 0 
                        SET @DefaultValue = RTRIM(LEFT(@DefaultValue, @endPos - 1))

                    SET @endPos = CHARINDEX(',', @DefaultValue)
                    IF @endPos <> 0 
                        SET @DefaultValue = RTRIM(LEFT(@DefaultValue, @endPos - 1))
                END
            ELSE 
                RETURN NULL
        END
    ELSE 
        RETURN 'INVALID PARAM NAME'

    IF RIGHT(@DefaultValue, 1) = CHAR(13) 
        SET @DefaultValue = RTRIM(SUBSTRING(@DefaultValue, 1, LEN(@DefaultValue) - 1))
    IF @is_output = 1
        AND RIGHT(@DefaultValue, 6) = 'OUTPUT' 
        SET @DefaultValue = SUBSTRING(@DefaultValue, 1, LEN(@DefaultValue) - 6)
    IF LEFT(@DefaultValue, 1) = '''' 
        BEGIN
            IF LEN(@DefaultValue) = 1 
                RETURN NULL
            IF RIGHT(@DefaultValue, 1) <> '''' 
                RETURN NULL
        END
    RETURN @DefaultValue
END

Description for SQL scalar function: Util dbo SPParamDefault

Todo