none
SQL While RRS feed

  • Pergunta

  • Olá pessoal,

    será que alguém pode me ajudar estou tentando fazer um while para pegar o valor de um parametro que vem dessa

    forma @valor= '1,2,30' preciso de um while que  monte a instrução do insert da forma é possivel?

    insert into @grupotype (IDGRUPO)values  (1),(2),(30)


    terça-feira, 22 de outubro de 2013 10:31

Respostas

  • Faça assim:

    CREATE TYPE dbo.GrupoType AS TABLE
    (
          IDGRUPO INT NOT NULL
           PRIMARY KEY (IDGRUPO)
    )
    GO
    declare @valor varchar(max) = '1,2,30'
    declare @cmd varchar(max) = 'insert into GrupoType (IDGRUPO) values ('+replace(@valor, ',','),(')+')'
    execute @cmd
    select IDGRUPO  from GrupoType


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    • Marcado como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 15:02
    terça-feira, 22 de outubro de 2013 11:53
  • Aline,

    Veja uma exemplo:

    Declare @Resultado Table (Numero Int) 
    
    Declare @ListaValores VarChar(50), @PosicaoAtual Int             
    
    Set @ListaValores='25,3545,45,6015,2569,14535,2544,4878,15'
    
    While CharIndex(',',@ListaValores,0) <> 0
     Begin 
      Set @PosicaoAtual = SubString(@ListaValores,1,CharIndex(',',@ListaValores,0)-1) 
      Set @ListaValores = SubString(@ListaValores,CharIndex(',',@ListaValores,0)+1,Len(@ListaValores)) 
    
      If Len(@PosicaoAtual) > 0
        Insert Into @Resultado Values (Convert(Int, @PosicaoAtual))    
     End 
    
      If Len(@ListaValores) > 0
        Insert Into @Resultado Values (Convert(Int,@ListaValores))
        
    Select * from @Resultado


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 15:02
    sexta-feira, 25 de outubro de 2013 17:05

Todas as Respostas

  • Aline, essa variável @grupotype vem de onde?

    é uma tabela?

    Você pode fazer algo do tipo:

    declare @grupotype varchar(max) = 'table'
    declare @valor varchar(max) = '1,2,30'
    declare @cmd varchar(max) = 'insert into '+@grupotype+' (IDGRUPO) values ('+replace(@valor, ',','),(')+')'
    
    execute @cmd

    Acho que deve funcionar


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    terça-feira, 22 de outubro de 2013 10:40
  • CREATE TYPE dbo.GrupoType AS TABLE
    (
          IDGRUPO INT NOT NULL
           PRIMARY KEY (IDGRUPO)
    )
    GO
    terça-feira, 22 de outubro de 2013 11:31
  • não consegui o que estou fazendo de errado

    CREATE TYPE dbo.GrupoType AS TABLE
    (
          IDGRUPO INT NOT NULL
           PRIMARY KEY (IDGRUPO)
    )
    GO
    declare @grupotype varchar(max) = 'table'
    declare @valor varchar(max) = '1,2,30'
    declare @cmd varchar(max) = 'insert into '+ @grupotype + ' (IDGRUPO) values ('+replace(@valor, ',','),(')+')'
    execute @cmd
    select IDGRUPO  from @grupotype

    terça-feira, 22 de outubro de 2013 11:42
  • Faça assim:

    CREATE TYPE dbo.GrupoType AS TABLE
    (
          IDGRUPO INT NOT NULL
           PRIMARY KEY (IDGRUPO)
    )
    GO
    declare @valor varchar(max) = '1,2,30'
    declare @cmd varchar(max) = 'insert into GrupoType (IDGRUPO) values ('+replace(@valor, ',','),(')+')'
    execute @cmd
    select IDGRUPO  from GrupoType


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    • Marcado como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 15:02
    terça-feira, 22 de outubro de 2013 11:53
  • Aline,

    Veja uma exemplo:

    Declare @Resultado Table (Numero Int) 
    
    Declare @ListaValores VarChar(50), @PosicaoAtual Int             
    
    Set @ListaValores='25,3545,45,6015,2569,14535,2544,4878,15'
    
    While CharIndex(',',@ListaValores,0) <> 0
     Begin 
      Set @PosicaoAtual = SubString(@ListaValores,1,CharIndex(',',@ListaValores,0)-1) 
      Set @ListaValores = SubString(@ListaValores,CharIndex(',',@ListaValores,0)+1,Len(@ListaValores)) 
    
      If Len(@PosicaoAtual) > 0
        Insert Into @Resultado Values (Convert(Int, @PosicaoAtual))    
     End 
    
      If Len(@ListaValores) > 0
        Insert Into @Resultado Values (Convert(Int,@ListaValores))
        
    Select * from @Resultado


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr segunda-feira, 28 de outubro de 2013 15:02
    sexta-feira, 25 de outubro de 2013 17:05