varchar como parametro de sp para entrar em clausula IN ()

12/08/2004

0

Tenho uma sp que recebe como parametro um varchar tipo :
set @variavel = ´1,2,3,4´

Quero utilizar eles em uma clausua in tipo:
UPDATE tabela SET x=1 WHERE id [b:b3772ee4ff]in ( @variavel )[/b:b3772ee4ff]

Pórem não é possível... [b:b3772ee4ff]não posso utilizar EXEC [/b:b3772ee4ff] e montar este update como texto pois uso uma variável local do tipo table...[b:b3772ee4ff] alguém sabe como usar um varechar do tipo ´1,1,2,3,4´ no IN ?????[/b:b3772ee4ff]

Obrigado,

Robson Ximenes


Robsonsx

Robsonsx

Responder

Posts

12/08/2004

Marcus.magalhaes

Boa tarde Robson.

Fiz esse código só como uma idéia rápida, e vc pode aperfeiçoa-lo para sua necessidade. Acho que é mais ou menos isso q vc tem, só que eu criei uma tabela temporaria a mais para fazer o filtro.

[color=green:a38248ae1d]Declare @temp_table table (col1 Int, col2 Int)
-- Inserts para popular minha tabela base
Insert Into @temp_table (col1, col2) values (1, 1)
Insert Into @temp_table (col1, col2) values (1, 2)
Insert Into @temp_table (col1, col2) values (1, 3)
Insert Into @temp_table (col1, col2) values (1, 4)
Insert Into @temp_table (col1, col2) values (1, 5)
Insert Into @temp_table (col1, col2) values (2, 1)
Insert Into @temp_table (col1, col2) values (2, 2)
Insert Into @temp_table (col1, col2) values (2, 3)
Insert Into @temp_table (col1, col2) values (2, 4)
Insert Into @temp_table (col1, col2) values (3, 1)
Insert Into @temp_table (col1, col2) values (3, 2)



Declare @temp_filtro Table (Col1 Int)

Declare @variavelVarChar(10), -- Variavel q será recebida
@posicaoInt

Set @variavel = ´1, 2, 4, 5´

While @variavel Is Not NULL
Begin
Select @posicao = CharIndex(´,´, @variavel)

If @posicao > 0
Begin
Insert Into @temp_Filtro (col1) values (Convert(Int, Substring(@variavel, 1, @posicao - 1)))
Set @variavel = Substring(@variavel, @posicao + 1, Len(@variavel) - @posicao)
End
Else
Begin
Insert Into @temp_Filtro (col1) Values (Convert(Int, @variavel))
Set @variavel = NULL
End
End

Select * from @temp_table
Select * from @temp_filtro

Update @temp_table
Set col2 = col2 + 10
Where col1 in (Select col1 From @temp_filtro)

Select * from @temp_table[/color:a38248ae1d]

Att,


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar