Ir para conteúdo

POWERED BY:

Arquivado

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

berkowitz

Função pra fazer papel de IN

Recommended Posts

Fala galera! beleza?

 

Tenho uma query que utiliza IN. Assim:

Select... WHERE trechos IN ('tre1','tre2','tre3');
Agora preciso transformá-la em uma procedure, e em procedure não tem como eu passar o valor desse IN por parâmetro (pelo menos não consegui! rs). por isso estou criando uma função que recebe uma string com todos os trechos, separa ela e retorna em forma de tabela. Assim eu faço um JOIN na minha query ao invés de fazer um IN.

 

Consegui criar essa função, mas com um probleminha: o último item nunca aparece!

Se eu passo "tre1,tre2,tre3" a função me devolve uma tabela com os 2 primeiros trechos.

 

A função ta assim:

 

declare	@Ini	int
	declare	@Fim	int
	declare	@item		varchar(10)
	declare @tmp_itens table(trecho varchar(100))
	declare @itens varchar(1000)
	
	set @itens = 'TRE03-01,TRE03-02,TRE03-03'
	set @Ini = 0
	set @Fim = charindex(',', @itens, @Ini)

	while (@Fim > 0)
	begin
		set @item = substring(@itens, @Ini, @Fim - @Ini)
			
		insert into @tmp_itens (trecho) values (cast(@item as varchar(10)))
		
		set @Ini = charindex(',', @itens, @Ini + 1)+1
		set @Fim = charindex(',', @itens, @Ini)

	end

Retorno dela:

trecho
----------------------------------------------------------------------------------------------------
TRE03-01
TRE03-02

(2 row(s) affected)

 

Alguém pode me dar uma força por favor?

 

VALEW!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você só precisa jogar uma vírgula depois do tre03-03 para que seu código funcione.

 

declare	@Ini	int
	declare	@Fim	int
	declare	@item		varchar(10)
	declare @tmp_itens table(trecho varchar(100))
	declare @itens varchar(1000)
	
	set @itens = 'TRE03-01,TRE03-02,TRE03-03,'
	set @Ini = 0
	set @Fim = charindex(',', @itens, @Ini)

	while (@Fim > 0)
	begin
		set @item = substring(@itens, @Ini, @Fim - @Ini)
			
		insert into @tmp_itens (trecho) values (cast(@item as varchar(10)))
		
		set @Ini = charindex(',', @itens, @Ini + 1)+1
		set @Fim = charindex(',', @itens, @Ini)

	end

select * from @tmp_itens

[]'s

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.