Voglio trasformare una query SQL in una procedura in SQL Server, ma ho un problema nell'istruzione IF.
Questa è la logica che voglio implementare:
//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 "
)
Dopo aver cercato su come utilizzare l'istruzione IF nelle Stored Procedure, sono uscito con questo, ma ha errori:
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
risposte:
4 per risposta № 1Puoi combinare AND
e OR
condizioni per ottenere il risultato desiderato. È possibile utilizzare la query seguente:
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)
In questo caso prima si valuta la condizione @PATIENT_STATUS = "all"
. Se restituisce true, otterrai tutti i risultati. Se viene valutato falso, solo allora vengono valutate altre condizioni.
Seconda condizione ((@PATIENT_STATUS = "out" AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NOT NULL)
viene valutato solo quando lo stato del paziente è out
, altrimenti viene valutata la terza condizione.
0 per risposta № 2
Puoi anche farlo:
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