Array
(
)

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

Robsonsx
   - 12 ago 2004

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 in ( @variavel )

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

Obrigado,

Robson Ximenes

Marcus.magalhaes
   - 12 ago 2004

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.

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

Att,