Ir para conteúdo
Fórum Script Brasil
  • 0

Procedure com Select IN (Lista )


ligerinho21

Pergunta

Olá Pessoal Boa Tarde,

Galera estou com uma duvida e gostaria que me ajudassem a entender o porque não consigo trazer como parâmetro uma lista que criei a partir de checkbox chegados na minha aplicação em C# + ASP.NET , é o seguinte tenho 3 tabelas(Treinamentos , Participantes e Funcionários) ou seja um treinamento tem vários participantes(Funcionários), então quando Seleciono no GridView da minha aplicação os participante eu monto uma Lista de selecionados e gravo no banco da seguinte forma(‘1’,’2’,’3’,’4’,’5’) , sendo assim preciso usar esses dados como parâmetro na minha clausula IN(ficando assim SELECT FUNC_ID FROM FUNCIONARIOS

WHERE FUNC_ID IN (‘1’,’2’,’3’,’4’,’5’) ,dessa maneira consigo recuperar todos os participantes daquele treinamento porem na procedure não esta reconhecendo o parâmetro como String/Varchar alguém sabe como faço pra usar essa lista como parâmetro na clausula IN do SQL SERVER 2008 ? ficarei muito grato pois já tentei varias forma porem sem sucesso , a baixo segue a Procedure com a logica completa.

/*Descrição das Tabelas*/

Funcionarios (FUNC_ID INT,FUNC_NOME VARCHAR(50))

Treinamentos(TREI_ID INT,TREI_NOME VARCHAR (50))

TREINAMENTOS_PARTICIPANTES(TREI_ID INT , TRPA_LIST_PARTICIPANTES VARCHAR (50)

obs: os dados da lista são gravados da seguinte forma, '1','2','3'

/*Procedure Busca Participantes*/

CREATE PROCEDURE Busca_Participantes (

@TREI_ID as INT

)

AS

DECLARE @ListaFunc_IDs VARCHAR(500)

BEGIN

SET @ListaFunc_IDs = @ListaFunc_IDs + (SELECT TRPA_LIST_PARTICIPANTES FROM TREINAMENTOS_PARTICIPANTES

WHERE TREI_ID = (@TREI_ID))

END

BEGIN

SELECT FUNC_ID FROM FUNCIONARIOS

WHERE FUNC_ID IN (@ListaFunc_IDs)

END

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom dia Ligerinho,

Os dados estão sendo inseridos no BD da forma '1','2','3',... ?

O campo @ListaFunc_IDs é identificado como varchar. Quando você fizer SELECT FUNC_ID FROM FUNCIONARIOS WHERE FUNC_ID IN (@ListaFunc_IDs), o SQL vai dar erro.

Outra coisa: se você tiver comparando campos inteiros, não há a necessidade as aspas simples. O campo pode ficar da forma 1,2,3...

Creio q esta implementação não funcionará desta forma. Ao montar o script, o SQL identificará alguns caracteres reservados gravados na Base (que seria a aspas simples e a vírgula). Ocorrerá erro na execução.

Mas vamos lá. Se quiser atribuir a string '1','2','3',... para uma variável:

DECLARE @Dados VARCHAR(500)
set @Dados = '''1'',''2'',''3'''
SELECT @Dados
Se você fizer WHERE FUNC_ID IN (@Dados), dará um erro de conversão. O q pode ser feito é concatenar o script, jogá-lo em uma variável e mandar executar a variável. Ficaria assim:
DECLARE @Dados VARCHAR(500)
set @Dados = '''1'',''2'',''3'''
SELECT @Dados 

DECLARE @SQL VARCHAR(500)
Set @SQL= 'SELECT * FROM FUNCIONARIOS WHERE FUNC_ID IN (' + @Dados + ')'
select @SQL

-- O comando abaixo é para executar a variável @SQL
Exec (@SQL)

- O melhor seria você retirar as aspas simples dos números. você terá problemas em qualquer SQL q fizer.

- O ideal mesmo é inserir cada participante em uma linha, com a coluna int. :.)

Faz os testes aí e depois me fala se deu certo.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...