如何在 sql 存储过程中使用 IF 语句
How can I use IF statement in sql stored-procedure
我想将 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
您可以结合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'
。如果它的计算结果为真,您将获得所有结果。如果它评估为 false,则仅评估其他条件。
第二个条件((@PATIENT_STATUS = 'out' AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NOT NULL)
仅当患者状态为out
时才被评估,否则第三个条件被评估。
你也可以这样做:
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
我想将 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
您可以结合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'
。如果它的计算结果为真,您将获得所有结果。如果它评估为 false,则仅评估其他条件。
第二个条件((@PATIENT_STATUS = 'out' AND CMS_ENCOUNTER.ENCOUNTER_END_TIME IS NOT NULL)
仅当患者状态为out
时才被评估,否则第三个条件被评估。
你也可以这样做:
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