Sql 关于存储过程中的情况

Sql 关于存储过程中的情况,sql,sql-server,tsql,dynamic-sql,Sql,Sql Server,Tsql,Dynamic Sql,我有以下疑问 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 o

我有以下疑问

 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
    )

这里的问题是我想在@WhrStr中的第一个和第二个case语句中得到结果。但是WhrStr中的值是“e.SpecializationId为null或e.SpecializationId不为null”意味着第一个被第二个覆盖。是否还要在第一个语句中附加第二个语句。

这在几个级别都不起作用

  • 不能将字符串附加到查询。要么全是动态的,要么全不是
  • 位需要使用字符串分隔符“
    …然后
    “(e.CourseId为空或e.CourseId不为空)…

  • “e.CourseId为null或e.CourseId不为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

这在几个层次上都不起作用

  • 不能将字符串附加到查询中。它要么是动态的,要么不是动态的
  • 位需要使用字符串分隔符“
    …然后
    “(e.CourseId为空或e.CourseId不为空)…

  • “e.CourseId为null或e.CourseId不为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