in gespeicherte Prozedur in Bezug auf Fall, wenn
-
13-09-2019 - |
Frage
Ich habe folgende Abfrage.
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
)
hier das Problem ist, ich möchte in erster erhalten führen und 2. Case-Anweisung in @WhrStr .Aber der Wert in WhrStr kommt, ist ‚e.SpecializationId ist null oder e.SpecializationId ist nicht null‘ bedeutet 1. durch den zweiten überschrieben wird. gibt es trotzdem zweite anhängen zum ersten.
Lösung
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)
Andere Tipps
Dies wird nicht in mehreren Ebenen arbeiten.
- Sie können nicht eine Zeichenfolge an einer Abfrage anhängen. Es ist entweder alle dynamischen oder gar nicht.
-
Der Fall, wenn Bit muss in String-Trennzeichen „
...THEN '(e.CourseId is null or e.CourseId is not null)'...
sein
-
"e.CourseId ist null oder e.CourseId ist nicht null" ist die gleiche "immer geben Sie mir Daten"
Alles, was Sie brauchen, ist:
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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow