Ошибка возникает из-за того, что результат сравнения substring
ни с чем не сравнивается. Строка не является логическим выражением.
Edit:
Теперь, когда вы отредактировали свой вопрос, этот ответ больше не имеет никакого смысла.
Я протестировал ваши выражения для подстрок с пустыми строками, и не получаю никакой ошибки. С другой стороны, если у вас есть строки, которые не являются пустыми, но не содержат символов @
, вы получите ошибку, которую вы описали.
Чтобы справиться с этим, вы можете сделать так:
... where case
when @ReportParameter1 = '' or charindex('@', @ReportParameter1) = 0 then 'x'
else substring(@ReportParameter1, 1, charindex('@', @ReportParameter1) - 1)
end =
case
when @ReportParameter2 = '' or charindex('@', @ReportParameter2) = 0 then 'x'
else substring(@ReportParameter2, 1, charindex('@', @ReportParameter2) - 1)
end
Обратите внимание, однако, что две строки, которые не являются адресами электронной почты, будут сравниваться так же, как и 'x' = 'x'
, поэтому вы можете захотеть использовать разные запасные значения в выражениях ...
Редактировать 2:
Если подумать, вам не нужно проверять пустые строки, если вы проверяете символ @, так как пустая строка не может содержать символ @:
... where case
when charindex('@', @ReportParameter1) = 0 then 'x'
else substring(@ReportParameter1, 1, charindex('@', @ReportParameter1) - 1)
end =
case
when charindex('@', @ReportParameter2) = 0 then 'x'
else substring(@ReportParameter2, 1, charindex('@', @ReportParameter2) - 1)
end