Usuário com melhor resposta
SQL While

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)
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
-
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
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
-
-
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 -
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
-
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