none
Select que verifica parametro de entrada RRS feed

  • Pergunta

  • Olá Pessoal.

     

    Gente, precisava  criar um select que esta muito complicado(pelo menos para mim).

    é o seguinte:

    Estou desenvolvendo uma tela de busca de Pneus onde a pessoa pode escolher buscar pela placa do veiculo ou pelo numero de matricula do pneu.

    ela deve escolher um ou outro, eu tenho que fazer uma procedure que verifique qual opção foi escolhida para retornar a informação....pois se a pessoa escolher a busca pela placa, eu retornarei todos os pneus daquele veiculo, se ela escolher a matricula eu retorno somente o pneu da matricula selecionada.

     

    A questão é, como fazer um select que verifique qual parametro usar para retornar um valor?

    abraço.

    sexta-feira, 26 de outubro de 2007 12:36

Respostas

  • hcosta,

     

    se vc testa se a variável é NULA, vc tem que permitir que ela o seja. Também estava faltando um END no final.

     

    Tente este código:

     

    CREATE PROCEDURE SP_FM_LOADTIRESINFORMATIONBYFILTERSELECTED

    (

    @REGISTER VARCHAR(10)=NULL, --IMPORTANTE

    @VEHICLEID INT=NULL --IMPORTANTE

    )

    AS

    SET NOCOUNT ON

    BEGIN

    IF UPPER(@REGISTER) IN NOT NULL

    BEGIN

    SELECT

    VEI.IDVEICULO AS VEHICLEID,

    VEI.PLACA AS PLATE,

    PNEVEI.IDEIXOPOSICAO AS EIXOPOSITIONID,

    PNE.MATRICULA AS REGISTER,

    PNE.FOGO AS FIRE,

    PNEMAN.NOTAFISCAL AS FISCALNOTE,

    PNE.DATAVENCIMENTOGARANTIA AS GARANTEEMATURITYDATE,

    PNEMAR.MARCA AS MARK,

    FORN.RAZAOSOCIAL AS SUPPLIER,

    PNEVEI.KMALOCACAO AS INITIALKM

    FROM

    TBFM_PNEUS AS PNE,

    TBFM_PNEUSVEICULOS AS PNEVEI,

    TBGE_VEICULOS AS VEI,

    TBFM_POSICOESEIXOS AS POSEIX,

    TBFM_PNEUSMARCAS AS PNEMAR,

    TBGE_FORNECEDORES AS FORN,

    TBFM_PNEUSMANUTENCOES AS PNEMAN

    WHERE PNE.MATRICULA = @REGISTER

    AND VEI.IDVEICULO = PNEVEI.IDVEICULO

    AND PNEVEI.IDEIXOPOSICAO = POSEIX.IDEIXOPOSICAO

    AND PNE.IDFORNECEDOR = FORN.IDFORNECEDOR

    AND PNE.IDMARCA = PNEMAR.IDMARCA

    ORDER BY MATRICULA

    END

    ELSE

    BEGIN

    SELECT

    VEI.IDVEICULO AS VEHICLEID,

    VEI.PLACA AS PLATE,

    PNEVEI.IDEIXOPOSICAO AS EIXOPOSITIONID,

    PNE.MATRICULA AS REGISTER,

    PNE.FOGO AS FIRE,

    PNEMAN.NOTAFISCAL AS FISCALNOTE,

    PNE.DATAVENCIMENTOGARANTIA AS GARANTEEMATURITYDATE,

    PNEMAR.MARCA AS MARK,

    FORN.RAZAOSOCIAL AS SUPPLIER,

    PNEVEI.KMALOCACAO AS INITIALKM

    FROM

    TBFM_PNEUS AS PNE,

    TBFM_PNEUSVEICULOS AS PNEVEI,

    TBGE_VEICULOS AS VEI,

    TBFM_POSICOESEIXOS AS POSEIX,

    TBFM_PNEUSMARCAS AS PNEMAR,

    TBGE_FORNECEDORES AS FORN,

    TBFM_PNEUSMANUTENCOES AS PNEMAN

    WHERE VEI.IDVEICULO = @VEHICLEID

    AND VEI.IDVEICULO = PNEVEI.IDVEICULO

    AND PNEVEI.IDEIXOPOSICAO = POSEIX.IDEIXOPOSICAO

    AND PNE.IDFORNECEDOR = FORN.IDFORNECEDOR

    AND PNE.IDMARCA = PNEMAR.IDMARCA

    ORDER BY MATRICULA

    END

     

     

    sexta-feira, 26 de outubro de 2007 15:34

Todas as Respostas

  • HCosta,

     

    Você já pensou em criar uma stored procedure, e dentro desta procedure utilizar alguns If's para fazer a analise de acordo com o valor escolhido.

    sexta-feira, 26 de outubro de 2007 12:39
  • Bom dia

     

    A solução mais simples é fazer isso através de uma procedure, dá uma olhada no exemplo

     

     

    Create Procedure usp_BuscaPneus(@codigo varchar(10),@tipo char(1)) as

    Begin

    If Upper(@tipo) = 'M' -- Busca Matrícula

    Begin

    Selet CAMPOS From SUATABELA Where Matricula = @codigo

    End

    Else

    Begin

    Selet CAMPOS From SUATABELA Where Codigo = @codigo

    End

    End

    GO

     

    Espero ter ajudado
    sexta-feira, 26 de outubro de 2007 12:41
  • Fala Pessol,

    eu fiz mais ou menos isso, existe alguma maneira de fazer  com que a procedure retorne alguma mensagem quando não encontrar nenhum registro no banco?

     

    Desde já agradeço.

    sexta-feira, 26 de outubro de 2007 13:07
  • Minha Procedure esta assim:

     

    CREATE PROCEDURE SP_FM_LOADTIRESINFORMATIONBYFILTERSELECTED
    (
     @REGISTER VARCHAR(10),
     @VEHICLEID INT
    )


    AS

     

    BEGIN
    IF UPPER(@REGISTER) IN NOT NULL
    BEGIN


    SELECT


     VEI.IDVEICULO AS VEHICLEID,
     VEI.PLACA AS PLATE,
     PNEVEI.IDEIXOPOSICAO AS EIXOPOSITIONID,
     PNE.MATRICULA AS REGISTER,
     PNE.FOGO AS FIRE,
     PNEMAN.NOTAFISCAL AS FISCALNOTE,
     PNE.DATAVENCIMENTOGARANTIA AS GARANTEEMATURITYDATE,
     PNEMAR.MARCA AS MARK,
     FORN.RAZAOSOCIAL AS SUPPLIER,
     PNEVEI.KMALOCACAO AS INITIALKM


    FROM


     TBFM_PNEUS AS PNE,
     TBFM_PNEUSVEICULOS AS PNEVEI,
     TBGE_VEICULOS AS VEI,
     TBFM_POSICOESEIXOS AS POSEIX,
     TBFM_PNEUSMARCAS AS PNEMAR,
     TBGE_FORNECEDORES AS FORN,
     TBFM_PNEUSMANUTENCOES AS PNEMAN


    WHERE


          PNE.MATRICULA = @REGISTER
     AND  VEI.IDVEICULO = PNEVEI.IDVEICULO
     AND PNEVEI.IDEIXOPOSICAO = POSEIX.IDEIXOPOSICAO
     AND PNE.IDFORNECEDOR = FORN.IDFORNECEDOR
     AND PNE.IDMARCA  = PNEMAR.IDMARCA
     
    ORDER BY

     

     MATRICULA


    END


    ELSE


    BEGIN


    SELECT

     

    VEI.IDVEICULO AS VEHICLEID,
     VEI.PLACA AS PLATE,
     PNEVEI.IDEIXOPOSICAO AS EIXOPOSITIONID,
     PNE.MATRICULA AS REGISTER,
     PNE.FOGO AS FIRE,
     PNEMAN.NOTAFISCAL AS FISCALNOTE,
     PNE.DATAVENCIMENTOGARANTIA AS GARANTEEMATURITYDATE,
     PNEMAR.MARCA AS MARK,
     FORN.RAZAOSOCIAL AS SUPPLIER,
     PNEVEI.KMALOCACAO AS INITIALKM


    FROM


     TBFM_PNEUS AS PNE,
     TBFM_PNEUSVEICULOS AS PNEVEI,
     TBGE_VEICULOS AS VEI,
     TBFM_POSICOESEIXOS AS POSEIX,
     TBFM_PNEUSMARCAS AS PNEMAR,
     TBGE_FORNECEDORES AS FORN,
     TBFM_PNEUSMANUTENCOES AS PNEMAN


    WHERE


         VEI.IDVEICULO = @VEHICLEID
     AND VEI.IDVEICULO = PNEVEI.IDVEICULO
     AND PNEVEI.IDEIXOPOSICAO = POSEIX.IDEIXOPOSICAO
     AND PNE.IDFORNECEDOR = FORN.IDFORNECEDOR
     AND PNE.IDMARCA  = PNEMAR.IDMARCA
     
    ORDER BY

     

     MATRICULA

    Go

     

    Não funciona corretamente....

    sexta-feira, 26 de outubro de 2007 13:17
  • hcosta,

     

    se vc testa se a variável é NULA, vc tem que permitir que ela o seja. Também estava faltando um END no final.

     

    Tente este código:

     

    CREATE PROCEDURE SP_FM_LOADTIRESINFORMATIONBYFILTERSELECTED

    (

    @REGISTER VARCHAR(10)=NULL, --IMPORTANTE

    @VEHICLEID INT=NULL --IMPORTANTE

    )

    AS

    SET NOCOUNT ON

    BEGIN

    IF UPPER(@REGISTER) IN NOT NULL

    BEGIN

    SELECT

    VEI.IDVEICULO AS VEHICLEID,

    VEI.PLACA AS PLATE,

    PNEVEI.IDEIXOPOSICAO AS EIXOPOSITIONID,

    PNE.MATRICULA AS REGISTER,

    PNE.FOGO AS FIRE,

    PNEMAN.NOTAFISCAL AS FISCALNOTE,

    PNE.DATAVENCIMENTOGARANTIA AS GARANTEEMATURITYDATE,

    PNEMAR.MARCA AS MARK,

    FORN.RAZAOSOCIAL AS SUPPLIER,

    PNEVEI.KMALOCACAO AS INITIALKM

    FROM

    TBFM_PNEUS AS PNE,

    TBFM_PNEUSVEICULOS AS PNEVEI,

    TBGE_VEICULOS AS VEI,

    TBFM_POSICOESEIXOS AS POSEIX,

    TBFM_PNEUSMARCAS AS PNEMAR,

    TBGE_FORNECEDORES AS FORN,

    TBFM_PNEUSMANUTENCOES AS PNEMAN

    WHERE PNE.MATRICULA = @REGISTER

    AND VEI.IDVEICULO = PNEVEI.IDVEICULO

    AND PNEVEI.IDEIXOPOSICAO = POSEIX.IDEIXOPOSICAO

    AND PNE.IDFORNECEDOR = FORN.IDFORNECEDOR

    AND PNE.IDMARCA = PNEMAR.IDMARCA

    ORDER BY MATRICULA

    END

    ELSE

    BEGIN

    SELECT

    VEI.IDVEICULO AS VEHICLEID,

    VEI.PLACA AS PLATE,

    PNEVEI.IDEIXOPOSICAO AS EIXOPOSITIONID,

    PNE.MATRICULA AS REGISTER,

    PNE.FOGO AS FIRE,

    PNEMAN.NOTAFISCAL AS FISCALNOTE,

    PNE.DATAVENCIMENTOGARANTIA AS GARANTEEMATURITYDATE,

    PNEMAR.MARCA AS MARK,

    FORN.RAZAOSOCIAL AS SUPPLIER,

    PNEVEI.KMALOCACAO AS INITIALKM

    FROM

    TBFM_PNEUS AS PNE,

    TBFM_PNEUSVEICULOS AS PNEVEI,

    TBGE_VEICULOS AS VEI,

    TBFM_POSICOESEIXOS AS POSEIX,

    TBFM_PNEUSMARCAS AS PNEMAR,

    TBGE_FORNECEDORES AS FORN,

    TBFM_PNEUSMANUTENCOES AS PNEMAN

    WHERE VEI.IDVEICULO = @VEHICLEID

    AND VEI.IDVEICULO = PNEVEI.IDVEICULO

    AND PNEVEI.IDEIXOPOSICAO = POSEIX.IDEIXOPOSICAO

    AND PNE.IDFORNECEDOR = FORN.IDFORNECEDOR

    AND PNE.IDMARCA = PNEMAR.IDMARCA

    ORDER BY MATRICULA

    END

     

     

    sexta-feira, 26 de outubro de 2007 15:34
  • Valeu pessoal...

    consegui resolver o problema..

    falow......abraço..

    sexta-feira, 26 de outubro de 2007 17:52