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