2009-12-07 34 views
0

我有以下查询。关于在存储过程中的情况

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'+' '[email protected] 
    ) 

这里的问题是,我想导致@WhrStr。但第一和第二case语句中WhrStr来的值是“e.SpecializationId为空或e.SpecializationId不为空”的意思是1被第二个覆盖。无论如何要追加第一个。

回答

1
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) 
4

这不会在几个级别上工作。

  • 您不能将字符串附加到查询。它要么全是动态的,要么全部不是。
  • 当位必须用字符串分隔符的情况下“...THEN '(e.CourseId is null or e.CourseId is not null)'...

  • ‘e.CourseId为空或e.CourseId不空’是相同的‘总是给我的数据’

所有你需要的是:

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 
+0

+1吧:)填充填充。 – Andomar 2009-12-07 11:10:20

相关问题