quarta-feira, 2 de dezembro de 2009

Procedure para transformar valores separados por vírgula em colunas

A seguinte procedure recebe como parâmetro um string com valores separados por vírgula,
e retorna um select com cada um dos valores como uma coluna.

CREATE PROCEDURE [dbo].[SPR_SELECT_STRING_COLUNA]
      @String VARCHAR(1000)
AS

DECLARE @Str varchar(5000)
DECLARE @Int int

SELECT @Str = ' '

  IF PATINDEX ('%,%', @String) = 0
  BEGIN

        Select @Str=@Str + @String + ' as Col1'

  END
  ELSE
  BEGIN

        SELECT @Int=0

        WHILE PATINDEX ('%,%', @String) > 0
        BEGIN


              SELECT @Int=@Int + 1

              SELECT @Str = @Str + '''' + SUBSTRING (@String, 1, PATINDEX ('%,%', @String) - 1) + '''' + ' as Col' + CAST(@Int as varchar(10))+','                                       

              SELECT @String = SUBSTRING (@String, PATINDEX ('%,%', @String) + 1, LEN(@String))

        END

        SELECT @Int=@Int + 1

        SELECT @Str = @Str + '''' + @String + '''' +  ' as Col' + CAST(@Int as varchar(10))                                       

  END

  EXEC('Select ' + @STR)

 
Podemos testar a procedure assim:

exec SPR_SELECT_STRING_COLUNA '1,2,3'

Nenhum comentário:

Postar um comentário

Leave your comment here!