Compare Produtos, Lojas e Preços
Register |  Login

SQL Lite

Gerenciador open-source para bases de dados SQL Server, MSDE/Express e Microsoft Access. Acessar
   

Smart Menu

O Smart Menu é uma ferramenta desenvolvida para facilitar o acesso e organizar seus atalhos para os programas mais utilizados. Acessar
   

Car Manager

 Gerenciador de gastos e média de consumo (Windows Mobile) para o seu veículo. Acessar.
   

Bem vindo ao novo site da Friendship

Em sua criação, em 1999, a Friendship surgiu como uma empresa voltada à pesquisa no desenvolvimento de soluções para acessos a bancos de dados e desenvolvimento de sistemas na Internet. O principal produto desse esforço é o SQL Lite, uma ferramenta gratuita de acesso a banco de dados, que já conta com mais de 9 mil usuários ao redor do mundo.
 
No ano de 2002, consciente da importância que a Internet representa para as empresas, principalmente na questão da democratização da informação e da redução dos custos, resolvemos aplicar nossos conhecimentos em diversos negócios no desenvolvimento de soluções que utilizem a Internet como meio.
   


Transformar array de valores em tabela

Localização: Blogs Leverson Carlos SQL Lite    
Publicado por:  Leverson Carlos 26/9/2007 19:36

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

 

 |  Permalink  |  Trackback

Seu Nome:
Título:
Comentário:
Atualizar   Cancelar 
   

 Pesquisa


Saiba onde tem o melhor preço antes de comprar