Pregunta

Tengo siguiente consulta.

 declare @Prm_CourseId int
declare @Prm_SpecializationId int
set @Prm_CourseId=5
set @Prm_SpecializationId=0
declare @WhrStr varchar(500)


set @WhrStr =  case @Prm_CourseId
                when 0 then
                    'e.CourseId is null or e.CourseId is not  null'
                when -1 then
                    'e.CourseId is null or e.CourseId is not  null'
                when isnull(@Prm_CourseId,0)  then
                     'e.CourseId is null or e.CourseId is not  null'
                else
                     'e.CourseId= '+Convert(varchar,@Prm_CourseId)

                 end
set @WhrStr  = case @Prm_SpecializationId
                when 0 then
                    'e.SpecializationId is null or e.SpecializationId is not  null'
                when -1 then
                    'e.SpecializationId is null or e.SpecializationId is not  null'
                when isnull(@Prm_SpecializationId,0)  then
                     'e.SpecializationId is null or e.SpecializationId is not  null'
                else
                     'e.SpecializationId= '+Convert(varchar,@ Prm_SpecializationId)
                end
print @WhrStr
    exec(
            'select f.EnquiryID,
            e.[Name],
            f.AttendedBy,
            f.Remarks,
            f.CreatedDate
            from STD_FollowUp f
                inner join
                    STD_Enquiry e
                     on f.EnquiryId=e.EnquiryId
            where'+' '+@WhrStr
    )

Aquí el problema es que quiero obtener el resultado en primera y segunda declaración en caso @WhrStr .Pero el valor que entra WhrStr es 'e.SpecializationId es nulo o e.SpecializationId no es nulo' significa primero se sobrescribe por segundo. ¿hay alguna forma para anexar segunda a primera.

¿Fue útil?

Solución

if (isnull(@Prm_CourseId, 0) = 0 or isnull(@Prm_CourseID, 0) = -1)
    set @Prm_CourseId = null

if (isnull(@Prm_SpecializationId, 0) = 0 or isnull(@Prm_SpecializationId, 0) = -1)
    set @Prm_SpecializationId = null

select f.EnquiryID,
e.[Name],
f.AttendedBy,
f.Remarks,
f.CreatedDate
from STD_FollowUp f
inner join
STD_Enquiry e
on f.EnquiryId=e.EnquiryId
where (@Prm_CourseId is null or e.CourseId = @Prm_CourseId)
or (@Prm_SpecializationId is null or e.SpecializationId = @Prm_SpecializationId)

Otros consejos

Esto no va a funcionar en varios niveles.

  • No se puede añadir una cadena a una consulta. Es o todo dinámico o no todo.
  • el caso de que poco tiene que estar en delimitadores de cadenas "...THEN '(e.CourseId is null or e.CourseId is not null)'...

  • "e.CourseId es nulo o e.CourseId no es nulo" es el mismo "siempre me dan los datos"

Todo lo que necesita es:

select f.EnquiryID,
    e.[Name],
    f.AttendedBy,
    f.Remarks,
    f.CreatedDate
from STD_FollowUp f
            inner join
                    STD_Enquiry e
                    on f.EnquiryId=e.EnquiryId
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top