none
Query Dinâmica com Data RRS feed

  • Pergunta

  • Por favor, estou fazendo a proc abaixo, porém travei  com a data, no banco tem um campo datetime chamado datasolicitacao, abaixo eu preciso fazer um filtro por periodo, tipo se ele digitar 01/01/2009 a 05/05/2009 eu trago todas as ordens neste período, porém se ele digitar 01/01/2009 eu trago desta data até hoje, vocês podem ajudar a criar esta Proc?
    Agradeço antecipadamente.
    Eduardo.


    ALTER PROCEDURE COMPRAS_CONSULTA_ORDENS
    (
       @SOLICITACAO INT = NULL,
       @PEDIDOCOTACAO INT = NULL,
       @CENTROCUSTO INT = NULL, --COD_CENTRO_CUSTO
       @FORNECEDOR VARCHAR(50) = NULL, -- NOME_FANTASIA
       @TITULO VARCHAR(50) = NULL, --TITULO_PEDIDO
       @PERFILUSUARIO INT = NULL, --PERFIL SESSION
       @COMPRADOR INT = NULL, --MATRIC_COMPRADOR_RESPONSAVEL
       @DTINICIAL VARCHAR(10) = NULL,
       @DTFINAL VARCHAR(10) = NULL
        
    )

    AS

    IF ISNULL(@FORNECEDOR, '') = ''       
    BEGIN       
     SET @FORNECEDOR = '%'        
    END       
    ELSE       
    BEGIN       
       SET @FORNECEDOR =  @FORNECEDOR + '%'       
    END


    IF ISNULL(@TITULO, '') = ''       
    BEGIN       
     SET @TITULO = '%'        
    END       
    ELSE       
    BEGIN       
       SET @TITULO =  @TITULO + '%'       
    END

     

    SELECT   VW_ORDENS_COMPRA_TODAS_ATUALIZADA.*,CONVERT(VARCHAR(10),DATA_SOLICITACAO,103) AS 'DATA ORD COMPRA',  
    case   when lEN(STATUS) = 0 then 'EM ABERTO' when STATUS = 'RO' then 'RECEBIDO OK' when STATUS = 'CA' then 'CANCELADA' END STATUS_OC 
    FROM VW_ORDENS_COMPRA_TODAS_ATUALIZADA
    WHERE Cod_solicitacao_compra = ISNULL(@SOLICITACAO, Cod_solicitacao_compra)
    AND COD_PEDIDO_COTACAO = ISNULL(@PEDIDOCOTACAO, COD_PEDIDO_COTACAO)
    AND COD_CENTRO_CUSTO = ISNULL(@CENTROCUSTO, COD_CENTRO_CUSTO)
    AND NOME_FANTASIA LIKE (CASE WHEN ISNULL(@FORNECEDOR,'')=''  THEN NOME_FANTASIA  ELSE @FORNECEDOR END) 
    AND TITULO_PEDIDO LIKE (CASE WHEN ISNULL(@TITULO,'')=''  THEN TITULO_PEDIDO  ELSE @TITULO END)
    AND COMPRADOR = ISNULL(@COMPRADOR, MATRIC_COMPRADOR_RESPONSAVEL) 

    AQUI PRECISO BUSCAR POR DATA

    GO

    terça-feira, 12 de maio de 2009 14:41

Respostas

  • Olá,

    Você pode fazer na cláusula where algo do tipo:

    where
    ( datasolicitacao = @datasolicitacao or @datasolicitacao is null )

    Outra coisa, procure realizar estes tratamentos antes de executar a procedure:

    IF ISNULL(@FORNECEDOR, '') = ''       
    BEGIN       
     SET @FORNECEDOR = '%'        
    END       
    ELSE       
    BEGIN       
       SET @FORNECEDOR =  @FORNECEDOR + '%'       
    END


    Abraços

    Demétrio Silva
    terça-feira, 12 de maio de 2009 15:39

Todas as Respostas

  • Eduardo,

    Então o usuário poderá ou não informar valores nos dois parâmetros de entrada para esta stored procedure?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 12 de maio de 2009 14:51
  • Não Jr. a idéia é pesquisar só se ele informar. Vou criar vários campos na aplicação nenhum é obrigatório. Sobre as datas só se ele informar, por período ou da data inicial até a data de hoje.

    Obrigado.

    terça-feira, 12 de maio de 2009 14:57
  • Olá,

    Você pode fazer na cláusula where algo do tipo:

    where
    ( datasolicitacao = @datasolicitacao or @datasolicitacao is null )

    Outra coisa, procure realizar estes tratamentos antes de executar a procedure:

    IF ISNULL(@FORNECEDOR, '') = ''       
    BEGIN       
     SET @FORNECEDOR = '%'        
    END       
    ELSE       
    BEGIN       
       SET @FORNECEDOR =  @FORNECEDOR + '%'       
    END


    Abraços

    Demétrio Silva
    terça-feira, 12 de maio de 2009 15:39
  • Demétrios,

    Concordo com suas sugestões, ainda mais se utilizar os parâmetros de entrada nas condições, fazendo a checagem dos dados.

    Mas para isso precisamos entender como ele esta utilizando os parâmetros ou se ele pretende utilizar este tipo de solução.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 12 de maio de 2009 17:04