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.
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.