Array
(
)

Problemas com cláusula IN

Luiz7s
   - 05 fev 2007

Bom dia amigos,

Um usuário chegou a mim com uma dúvida que não estou conseguindo resolver... Ele pediu que tornasse possível a execução da sequência abaixo em uma procedure:

declare @var string
set @var = ´1,2,3,4,5´

select * from apf_agencia
where cod_agbco in (@var)

Apesar, de saber que o tipo string não existe coloquei exatamente o que ele requisitou... O campo cod_agbco é numérico (inteiro).

Já tentei diversas idéias, desde converter o campo para varchar e por a variável tb, etc... Quando coloco a variável varchar e converto o campo para varchar tb não retorna nada. Exceto quando tiro todas as vírgulas e deixo somente um número como por exemplo @var=´1´.

Ou seja:

declare @var varchar(10)
set @var = ´1,2,3,4,5´

select * from apf_agencia
where convert(varchar(10),cod_agbco) in (@var)

NÃO RETORNA NADA

Enquanto:

declare @var varchar(10)
set @var = ´1´

select * from apf_agencia
where convert(varchar(10),cod_agbco) in (@var)

RETORNA...

Se alguém souber de algo pra me ajudar ficaria muito grato...

Obrigado,
Luiz Fernando

Psergio.p
   - 05 fev 2007

Caro amigo, a instrução IN deve receber obrigatoriamente uma lista de valores,

Exemplo: IN(1,2,3,4,5) ou IN(´1´,´2´,´3´,´4´,´5´)

Talvez você consega fazer o que está querendo montando dinamicamente a Query pelo sua aplicação!

Luiz7s
   - 06 fev 2007

Hum... então acho que a única saída será concatenar tudo e usar o execute...

Alguém sabe me mostrar como fazer isso? Não tenho mto domínio em SQL... Pior ainda que tenho que fazer a mesma coisa em Sybase...

Psergio.p
   - 06 fev 2007

Veja este artigo sobre query´s dinamicas se te ajuda!

http://www.devmedia.com.br/visualizaComponente.aspx?comp=3315&;site=2