Quantcast
Channel: Procedure isnull
Viewing all articles
Browse latest Browse all 13

Procedure isnull

$
0
0
Tenho a seguinte situação, uma consulta onde o usuário pode ou não selecionar dados para ser pesquisados.
Exemplo:
Estado Civil:

Sexo:

Região:

Sendo assim eu quero somente quem é Casado(a), Feminino e que resida na Zona Sul, executo a proc
==========================================================
exec teste

'Casado(a)', 'nulo','nulo','nulo','nulo',
'Feminino','nulo',
'Zona Sul', 'nulo','nulo','nulo','nulo'

Funciona direitinho
Casado(a)    Feminino    1952-04-22 00:00:00.000    Zona Sul    67284434872
Casado(a)    Feminino    1977-12-14 00:00:00.000    Zona Sul    25014569803
Casado(a)    Feminino    1963-10-09 00:00:00.000    Zona Sul    03515177825
Casado(a)    Feminino    1973-12-02 00:00:00.000    Zona Sul    16949664885
Casado(a)    Feminino    1957-04-18 00:00:00.000    Zona Sul    02959190866
==========================================================
Segue a procedure
==========================================================
CREATE PROCEDURE teste
    (
        @EstadoCivil1 nvarchar(50) = null ,
        @EstadoCivil2 nvarchar(50) = null,
        @EstadoCivil3 nvarchar(50) = null,
        @EstadoCivil4 nvarchar(50) = null,
        @EstadoCivil5 nvarchar(50) = null,
        @Sexo1          nvarchar(50) = null,
        @Sexo2          nvarchar(50) = null,
        @Regiao1      nvarchar(50) = null,   
        @Regiao2      nvarchar(50) = null,
        @Regiao3      nvarchar(50) = null,
        @Regiao4      nvarchar(50) = null,
        @Regiao5      nvarchar(50) = null
--        @Cidade nvarchar(50)
    )

AS


select NomeCompleto, EstadoCivil, Sexo,Nascimento, Regiao, CPF from cv_CandidatoDados
where

(

(EstadoCivil = isnull(@EstadoCivil1, EstadoCivil))
or
 (EstadoCivil = isnull(@EstadoCivil2, EstadoCivil))
or
 (EstadoCivil = isnull(@EstadoCivil3, EstadoCivil))
or
(EstadoCivil = isnull(@EstadoCivil4, EstadoCivil))
or
 (EstadoCivil = isnull(@EstadoCivil5, EstadoCivil))

)
and

(
(Sexo = isnull(@Sexo1,Sexo))
or
(Sexo = isnull(@Sexo2,Sexo))

)

and

(

(Regiao = isnull(@Regiao1,Regiao))
or
(Regiao = isnull(@Regiao2,Regiao))
or
(Regiao = isnull(@Regiao3,Regiao))
or
(Regiao = isnull(@Regiao4,Regiao))
or
(Regiao = isnull(@Regiao5,Regiao))


)

ORDER BY NomeCompleto

GO
==========================================================

MINHA DÚVIDA é quando o usuário não marca nada, por exemplo caso ele não escolha no
Sexo nenhuma opção ele irá exibir todos os dados, mas não esta dando certo, ele não retorno nenhuma linha.

exec teste

'Casado(a)', 'nulo','nulo','nulo','nulo',
'nulo','nulo',
'Zona Sul', 'nulo','nulo','nulo','nulo'


Onde estou errando? Como estou montando esta procedure é a melhor solução?

Muito obrigado pela atenção.

Viewing all articles
Browse latest Browse all 13

Latest Images

Trending Articles





Latest Images