none
Ajuda - Case RRS feed

  • Pergunta

  •      
    CREATE PROCEDURE [dbo].[spGetItemsHeader]
    (
    	@Name varchar(50) = NULL,
    	@Date datetime    = NULL,
    	@Active smallint  = NULL
    )
    AS
    BEGIN
      SELECT idItemHeader,
    	     dsName,
    	     dsUrl,
    	     dtVigenciaIni,
    	     dtVigenciaFim,
    	     nuPrioridade,
    	     dsType
      FROM   tbItemsHeader
      WHERE  (dsName = NULL OR dsName LIKE '%' + @Name + '%')
         AND (@Date BETWEEN dtVigenciaIni and dtVigenciaFim)
         AND (CASE @Active
             WHEN 0 THEN (GETDATE() NOT BETWEEN dtVigenciaIni AND dtVigenciaFim)
             WHEN 1  THEN (GETDATE() BETWEEN dtVigenciaIni AND dtVigenciaFim)
             END = @Active)
    END
    
    

     

    Pessoal, como ficaria o case acima corretamente dentro da clausula where?

    quinta-feira, 2 de fevereiro de 2012 17:38

Respostas

  • Teste:

    CREATE PROCEDURE [dbo].[spGetItemsHeader]
    (
        @Name varchar(50) = NULL,
        @Date datetime    = NULL,
        @Active smallint  = NULL
    )
    AS
    BEGIN
      SELECT idItemHeader,
             dsName,
             dsUrl,
             dtVigenciaIni,
             dtVigenciaFim,
             nuPrioridade,
             dsType
      FROM   tbItemsHeader
      WHERE  (dsName = NULL OR dsName LIKE '%' + @Name + '%')
         AND (@Date BETWEEN dtVigenciaIni and dtVigenciaFim)
         AND
            (
                (@Active = 0 and GETDATE() NOT BETWEEN dtVigenciaIni AND dtVigenciaFim)
                or
                (@Active = 1 and GETDATE() BETWEEN dtVigenciaIni AND dtVigenciaFim)
            )


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Marcado como Resposta .NET Dev quinta-feira, 2 de fevereiro de 2012 17:47
    quinta-feira, 2 de fevereiro de 2012 17:43