Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde, Estou executando essa query em uma procedure, sendo qeu o @IdRabichos é uma string, pois vem em um aglomerado de id's ('209, 210, 211, 212, 213, 218, 219'): UPDATE DadosItemInsumo SET FkGravacaoIRSInsumo = @idGravacao WHERE IdDadoInsumo IN (REPLACE(@IdRabichos,'''',' ')). O Campo IdDadoInsumo é inteiro, logo, não aceita sem o replace por conta das aspas, mas não consigo executar, pois o replace não está retirando as mesmas. Alguma ideia?
Jr,
CREATE TABLE #IdsRabichoTEMP (Ids INT); //Tentei com varchar também.
INSERT INTO #IdsRabichoTEMP VALUES (@IdRabichos);
E ai coloquei:
UPDATE DadosItemInsumo SET FkGravacaoIRSInsumo = @idGravacao WHERE IdDadoInsumo IN (SELECT * FROM #IdsRabichoTEMP);
Mas deu o mesmo erro...
Falha ao converter o varchar valor ' 215, 216, 217' para o tipo de dados int.
vc recebe os dados deste modo mesmo?
'209, 210, 211, 212, 213, 218, 219'
Olá Valéria.
Tempos atrás desenvolvi uma function que pode te ajudar.
Segue script:
CREATE FUNCTION [dbo].[fncSiDesmembraString]
(
@quebra char(1),
@Texto varchar(8000)
)
RETURNS @Tabretorno TABLE
(
parametro varchar(8000)
)
as
begin
Declare @tamanho int
set @tamanho = len(@Texto)
declare @posicao int,
@caracter char(1),
@cache varchar(8000)
set @posicao = 1
while @posicao <= @tamanho+1
begin
select @caracter = substring(@texto, @posicao,1)
if (@caracter = @quebra)
begin
--select @posicao , @tamanho
insert into @Tabretorno
values (@cache)
set @cache = ''
end
else if (@posicao = @tamanho + 1)
begin
insert into @Tabretorno
values (@cache)
end
else
begin
set @cache = isnull(@cache,'') + @caracter
--select @cache
end
set @posicao = @posicao + 1
end
return
end
Basta informar qual é o separador (no teu caso ',', e a string a ser desmembrada :
select parametro from dbo.fncSiDesmembraString(',','209, 210, 211, 212, 213, 218, 219')
Adaptando sua query ficaria parecido com isso:
UPDATE DadosItemInsumo SET FkGravacaoIRSInsumo = @idGravacao
WHERE IdDadoInsumo IN (select convert(int,parametro)
from dbo.fncSiDesmembraString(',','209, 210, 211, 212, 213, 218, 219')
)
Fico à disposição caso necessário.
Obrigado Valeria por fazer a pergunta que eu tinha duvida! Pois, passado mais de 3 anos, ela me serviu como help!
Valeu demais Cosme Ferreira, você iluminou minha perda de tempo! Toma o fonte que fiz baseado no seu, com algumas alterações!!!! VLWWWWWW!!!
CREATE function dbo.geraFilori (@filori varchar(8000), @carac char(1)) returns @Tabfilori TABLE ( parametro varchar(8000) )
as
begin
declare @tamanho int
declare @posicao int
declare @caracter char(1)
declare @quebra char(1)
declare @cache varchar(8000)
set @tamanho = len(@filori)
set @posicao = 1
set @quebra = @carac
while @posicao <= @tamanho
begin
select @caracter = substring(@filori, @posicao,1)
if (@caracter = @quebra)
begin
--select @posicao , @tamanho
insert into @Tabfilori values (@cache)
set @cache = ''
end
else
begin
set @cache = isnull(@cache,'') + @caracter
end
set @posicao = @posicao + 1
end
insert into @Tabfilori values (@cache)
set @cache = ''
return
end
go
Coloque estes dados em um tabela e faça um in com este campo.