Get fully Function Content

  • Hi,

    I'm getting problem to get a table function content from SQL Server 2005.

    I have the following routine but my functions have more than 8000 char.

    SELECT ROUTINE_DEFINITION

    FROM INFORMATION_SCHEMA.ROUTINES

    How can I get all information/code from a Big function?

    muek

  • Use this function:

    ALTER function [dbo].[fnSplit1](

    @parameter varchar(Max) -- the string to split

    , @Seperator Varchar(64) )

    RETURNS @Items TABLE(

    ID INT -- the element number

    , item VARCHAR(8000) -- the split-out string element

    , OffSet int -- the original offest

    --( not entirley accurate if LEN(@Seperator) > 1 because of the Replace() ))

    AS

    BEGIN

    /*

    "Monster" Split in SQL Server 2005

    From Jeff Moden, 2008/05/22

    BYoung, 2008/06/18: Modified to be a Table-Valued Function

    And to handle CL/LF or LF-only line breaks

    (Note: make it inline later, to make it faster)

    Test: (scripts all triggers in your database)

    Select Lines.Item

    From sys.sql_modules M

    Join sys.objects O on O.object_id = M.object_id

    cross apply dbo.fnSplit1(M.definition, char(13)+char(10)) Lines

    Where O.Type = 'TR'

    Order by O.create_date, Lines.ID

    */

    Declare @Sep char(1)

    Set @Sep = char(10) --our seperator character

    --NOTE: we make the @Sep character LF so that we will automatically

    -- parse out rogue LF-only line breaks.

    --===== Add start and end seprators to the Parameter so we can handle

    -- all the elements the same way

    -- Also change the seperator expressions to our seperator

    -- character to keep all offsets = 1

    SET @Parameter = @Sep+ Replace(@Parameter,@Seperator,@Sep) +@Sep

    ;WITH cteTally AS

    (--==== Create a Tally CTE from 1 to whatever the length

    -- of the parameter is

    SELECT TOP (LEN(@Parameter))

    ROW_NUMBER() OVER (ORDER BY t1.Object_ID) AS N

    FROM Master.sys.All_Columns t1

    CROSS JOIN Master.sys.All_Columns t2

    )

    INSERT into @Items

    SELECT ROW_NUMBER() OVER (ORDER BY N) AS Number,

    SUBSTRING(@Parameter, N+1, CHARINDEX(@Sep, @Parameter, N+1)-N-1) AS Value

    , N+1

    FROM cteTally

    WHERE N < LEN(@Parameter)

    AND SUBSTRING(@Parameter, N, 1) = @Sep --Notice how we find the seperator

    Return

    END

    like so:

    SELECT Lines.Item

    FROM INFORMATION_SCHEMA.ROUTINES

    Cross Apply dbo.fnsplit1(ROUTINE_DEFINITION, char(13)+char(10)) Lines

    [font="Times New Roman"]-- RBarryYoung[/font], [font="Times New Roman"] (302)375-0451[/font] blog: MovingSQL.com, Twitter: @RBarryYoung[font="Arial Black"]
    Proactive Performance Solutions, Inc.
    [/font]
    [font="Verdana"] "Performance is our middle name."[/font]

  • Thanks rbarryyoung, that's what I need 🙂

Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic. Login to reply