Искам да трансформирам SQL заявка в процедура в SQL сървър, но имам проблем в оператора IF.
Това е логиката, която искам да прилагам:
//If the patientStatus equals "all" there will be no condition
patientStatus.ToString() == "all" ? "" :
(
patientStatus.ToString() == "out"
? " AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NOT NULL"
:" AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NULL "
)
След като потърсих как да използвам изявлението IF в съхранени процедури, излязох с това, но има грешки:
IF(@PATIENT_STATUS != "all")
BEGIN
if(@PATIENT_STATUS = "out")
BEGIN
AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NOT NULL
END
else
BEGIN
AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NULL
END
END
Отговори:
4 за отговор № 1Можете да комбинирате AND
и OR
условия за получаване на желания от вас резултат. Можете да използвате по-долу заявка:
SELECT * FROM tablename AS CMS_ENCOUNTER
WHERE
(@PATIENT_STATUS = "all") OR
(@PATIENT_STATUS = "out" AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NOT NULL) OR
(@PATIENT_STATUS <> "out" AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NULL)
В този случай първо оценявате състоянието @PATIENT_STATUS = "all"
, Ако се оцени като вярно, получавате всички резултати. Ако се оценява на невярно, само тогава се оценяват други условия.
Второ условие ((@PATIENT_STATUS = "out" AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NOT NULL)
се оценява само когато е състоянието на пациента out
, в противен случай се оценява третото състояние.
0 за отговор № 2
Можете също да направите това:
AND CASE
WHEN @PATIENT_STATUS = "all" THEN 1 = 1
WHEN @PATIENT_STATUS = "out" THEN CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NOT NULL
ELSE CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NULL
END