Transformar array de valores em tabela 

Wednesday, September 26, 2007 6:36:28 PM
Rate this Content 3 Votes

Muitas vezes, me deparo com o problema de ter uma lista de valores (contida numa string, por exemplo) e querer utilizá-la como registros de uma tabela, talvez para fazer join com alguma outra tabela ou coisa assim. Se essa necessidade ocorrer dentro de uma PROC, poderíamos criar uma tabela temporária, abastecê-la com os registros desejados, fazer uso da forma que desejarmos e depois apagá-la. Já numa VIEW não temos como criar objetos, apenas os consultamos, ou numa rotina dentro de um programa, as limitações seriam semelhantes.

Foi pensando nisso que eu dei uma estudada e cheguei no script abaixo. Ele cria na base de dados uma FUNCTION que recebe por parâmetro uma string contendo a lista de valores e outro contendo o caractere usado como separador na lista e retorna uma tabela com uma coluna e os diversos valores em forma de registros. Vamos ao script:

CREATE FUNCTION dbo.GetTableFromString

(

   @Valores VarChar(4000),

   @Separador Char(1)

 )

RETURNS @Retorno TABLE( Valor VarChar(256) )

BEGIN

 

   DECLARE @PosIni INT, @PosFim INT

   SELECT

      @PosIni = 1,

      @PosFim = CharIndex(@Separador, @Valores)

 

   WHILE @PosIni < Len(@Valores) + 1 BEGIN

      IF @PosFim = 0 BEGIN

         SET @PosFim = Len(@Valores) + 1

      END

 

      INSERT INTO @Retorno (Valor)

      VALUES( SUBSTRING(@Valores, @PosIni, @PosFim - @PosIni) )

 

      SET @PosIni = @PosFim + 1

      SET @PosFim = CharIndex(@Separador, @Valores, @PosIni)

   END

 

   RETURN

END

 

Supondo que temos a seguinte lista: 'azul|verde|branco|preto', podemos ver que os valores são separados pelo caractere: '|' ou seja, faríamos a chamada da função da seguinte forma: 

 SELECT * FROM dbo.GetTableFromString('azul|verde|branco|preto', '|')

 

E o retorno seria:

Valor

-------------------

azul

verde

branco

preto

 

(6 row(s) affected)

 

po-po-por hoje é só pe-pe-pessoal... até a próxima

Copyright 2008 Friendship Solutions

Site Map | Printable View | © 2008 - 2010 Friendship Solutions

Powered by mojoPortal | HTML 5 | CSS | Design by styleshout