Во-первых, я настоятельно советую вам использовать case
вместо iif()
.case
выражения являются стандартным SQL.iif()
предназначен для «обратной» совместимости с MS Access.
Во-вторых, вам необходимо четко указать сравнение NULL
в SQL Server.Он не поддерживает NULL
безопасных сравнений.Это выглядит так:
(CASE WHEN T1.MBR_STAT = CAST(T2.MEMSTA_SHORT_NAME AS VARCHAR(10))
THEN 'MATCH'
WHEN T1.MBR_STAT IS NULL AND T2.MEMSTA_SHORT_NAME IS NULL
THEN 'MATCH'
ELSE 'DON''T MATCH'
END) AS MBR_STAT_VALIDATION,
Мне также кажется странным, что вы используете CAST()
для этой цели, когда есть очень хорошая функция LEFT()
, которая проще и делает логику более ясной:
(CASE WHEN T1.MBR_STAT = LEFT(T2.MEMSTA_SHORT_NAME, 10)
THEN 'MATCH'
WHEN T1.MBR_STAT IS NULL AND T2.MEMSTA_SHORT_NAME IS NULL
THEN 'MATCH'
ELSE 'DON''T MATCH'
END) AS MBR_STAT_VALIDATION,