/ / Как мога да използвам IF оператора в sql съхранявана процедура - sql, sql-сървър, съхранявани процедури

Как мога да използвам инструкцията IF в sql stored procedure - sql, sql-server, съхранени процедури

Искам да трансформирам 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