fnMakeVarCharTableFromStringWithEscape

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CharString nvarchar(2000) IN
@Delim nvarchar(1) IN
@escpChar nvarchar(1) IN

Definition

Copy


 CREATE function [dbo].[fnMakeVarCharTableFromStringWithEscape](@CharString nvarchar(2000), @Delim nvarchar(1), @escpChar nvarchar(1))
returns @CharTable TABLE([value] nvarchar(256))
as
BEGIN

    DECLARE @currentChar nvarchar(1), @currentWord nvarchar(2000), @intPos integer,  @len integer
    DECLARE @escpMode bit

    SET @escpMode = 0
    SET @currentWord = ''
    SET @intPos = 1
    SET @len = len(@CharString)            

    WHILE @intPos <= @len
    BEGIN
    SET @currentChar = substring(@CharString,@intPos,1)
    --SELECT @intPos '@intPos', @currentChar '@currentChar'
    --if escape mode
    IF (  @escpMode = 1
    BEGIN
        --add current char to current word
        SET @currentWord = @currentWord + @currentChar
        --exit escape mode
        --SELECT 'EXIT ESCAPE MODE!!!!'
        SET @escpMode = 0 
    END
    --if not escape mode
    ELSE
    BEGIN 
        --if current char = delim, cut word
        IF ( @currentChar = @Delim )
        BEGIN
            INSERT INTO @CharTable SELECT @currentWord
            SET @currentWord = ''
        END
        ELSE
        BEGIN
            --if current char = escape char, forget current char and enter escape mode
            IF ( @currentChar = @escpChar )
            BEGIN
                --SELECT 'ENTER ESCAPE MODE!!!!'
                SET @escpMode = 1
            END
            ELSE
            --else add current char to current word
            BEGIN
                --add current char to current word
                SET @currentWord = @currentWord + @currentChar
            END
        END
    END
    --SELECT @currentWord '@currentWord'
    SET @intPos = @intPos + 1
    END

    --last word management
    IF ( len(@currentWord) > 0
    BEGIN
        INSERT INTO @CharTable SELECT @currentWord
        SET @currentWord = ''
    END
    RETURN            
END