Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

valeriabarros

Replace para aspa simples

Recommended Posts

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?

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.