/ / Come posso usare l'istruzione IF in sql stored procedure - sql, sql-server, stored procedure

Come posso usare l'istruzione IF in sql stored-procedure - sql, sql-server, stored-procedures

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 № 1

Puoi 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