none
Stored Procedure com retorno de mais de um item RRS feed

  • Pergunta

  • Pessoal! Boa noite!

    Estou com um problema e gostaria de ver se alguém tem alguma ideia de solução:

    Tenho uma tabela onde incluo algumas demandas de técnicos disponíveis, e outra onde tenho os técnicos que estão disponíveis (ou não) e que atendem os requisitos da solicitação, por exemplo:

    Tabela 01 (solicitações):

    Solicitação 01 - Técnico fluente em inglês que esteja disponível depois das 18h00 dia 05/10/2018.

    Tabela 02 (técnicos):

    Paulo - fala inglês - disponível 06/10/2018 08:00;

    José - fala espanhol - disponível 06/10/2018 18:00;

    Robson - fala inglês - disponível 05/10/2018 18:00;

    João - fala francês - disponível 05/10/2018 18:00;

    André - fala inglês - disponível 05/10/2018 18:00.

    Seguindo esta lógica, preciso criar uma Tabela 03 com os técnicos que "cumprem os requisitos", tipo:

    Solicitação 01 - Robson;

    Solicitação 01 - André.

    Tento fazer mas dá este erro:

    Msg 512, Nível 16, Estado 1, Procedimento dbo.Solicitacao_Busca, Linha 17 [Linha de Início do Lote 0]
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
    The statement has been terminated.

    Alguém tem alguma ideia para me ajudar por favor?

    Agradeço antecipadamente.

    Robson Parisoto.


    Robson Giovanni Parisoto.

    sábado, 29 de setembro de 2018 03:08

Respostas

Todas as Respostas

  • Deleted
    sábado, 29 de setembro de 2018 11:49
  • Bom dia José! Obrigado pelo retorno!

    Tenho três tabelas:

    Uma que é o cadastro de técnicos, tem nome, idioma, hora disponível;

    Outra que é das solicitações (que um cliente faz), que tem, cliente, idioma solicitado e hora que quer o serviço;

    Preciso de uma terceira tabela que me diga quais técnicos da tabela 01 estão de acordo com a solicitação do cliente na tabela 02. Então, criei uma procedure que inicia sempre que uma nova linha é incluída na tabela 02 (faz um match entre solicitação e disponibilização).

    Deu erro para mim pois as vezes tenho dois técnicos que se enquadram no perfil solicitado, e preciso criar duas colunas, aí ele dá o erro abaixo:

    Msg 512, Nível 16, Estado 1, Procedimento dbo.Solicitacao_Busca, Linha 17 [Linha de Início do Lote 0]
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
    The statement has been terminated.

    Não sei se consegui explicar melhor, qualquer coisa me avise.

    Obrigado.


    Robson Giovanni Parisoto.

    sábado, 29 de setembro de 2018 12:42
  • Outra coisa, estou rodando isso no Azure (caso seja pertinente).

    Robson Giovanni Parisoto.

    sábado, 29 de setembro de 2018 12:44
  • Deleted
    sábado, 29 de setembro de 2018 13:55
  • Muito bom José! Vou fazer alguns testes pra ver se consigo utilizar.

    Quanto ao processo de seleção, normalmente o técnico responde por um idioma somente, e a hora, é sempre de seis em seis, então, tenho fixo quem estará disponível, as 6, 12, 18, 24 e 6 novamente.

    O esquema funcionará tipo um Uber, onde o cliente faz a solicitação, a procedure cria essa tabela para que o cliente possa ver quem está disponível, o ETL envia notificação para os técnicos disponíveis, e o primeiro que selecionar, fará o atendimento.

    Por isso é bem simples, o ruim é que realmente não consigo relacionar quantos notificaram em seu usuário que terminaram uma atividade e estarão prontos para o próximo horário, que ele mesmo define que será as 6, 12, 18 ou 24.

    Mas vou tentar e te aviso, por hora te agradeço imensamente, vou tentar fazer e te aviso depois.

    Obrigado.


    Robson Giovanni Parisoto.

    sábado, 29 de setembro de 2018 15:06
  • José! Fiz da seguinte forma:

    ALTER PROCEDURE [dbo].[MatchTecnico]

    @IDIOMA VARCHAR(150),

    @DATAHORASOLICITACAO DATETIME

    WITH CONSULTA AS ( SELECT NOMETECNICO, SEQ = ROW_NUMBER() OVER (ORDER BY NOMETECNICO)

    FROM TECNICOS

    WHERE IDIOMA = @IDIOMA

    AND DATADISPONIVEL = @DATAHORASOLICITACAO )

    INSERT INTO MATCHTECNICO

    (TECNICO, DATACADASTRO)

    VALUES

    (MAX (CASE WHEN SEQ = 1 THEN TECNICO END),

    GETDATE() )

    Aí deu este erro:

    Msg 207, Nível 16, Estado 1, Procedimento MatchTecnico, Linha 26 [Linha de Início do Lote 5] Invalid column name 'SEQ'.

    Msg 4104, Nível 16, Estado 1, Procedimento MatchTecnico, Linha 26 [Linha de Início do Lote 5] The multi-part identifier "TECNICO" could not be bound.

    Me desculpe se estou fazendo erros amadores demais, pois na verdade não tenho a expertise nisso mesmo, kkk.


    Robson Giovanni Parisoto.


    sábado, 29 de setembro de 2018 16:43
  • Deleted
    sábado, 29 de setembro de 2018 17:53
  • Bah José, claro, com certeza, preciso de duas linhas, não duas colunas, perdão pela confusão.


    Robson Giovanni Parisoto.

    sábado, 29 de setembro de 2018 21:09