Вы не должны удваивать одинарные кавычки в проверке сравнения.
Кроме того, как указал Грамбо, если вы хотите NULL в вашей динамической строке sql, вам нужно объединить строковое значение 'NULL'
вместо фактического объединения NULL
.
Вместо этого:
'+ (SELECT IIF ( @SMTPUID != '''', ''''+ @SMTPUID +'''', NULL)) + ',
вы должны делать это:
'+ (SELECT IIF ( @SMTPUID != '', ''''+ @SMTPUID +'''', 'NULL')) + ',
Наконец, я верю, что у вас есть цель самообразования для того, чтобы сделать это с динамическим sql, потому что ничего не делается вваш пример кода, который не может быть выполнен в обычном (нединамическом) sql.
И, наконец, в конечном коде, если вам нужно использовать динамический sql, потому что вы используете переменные для баз данных, таблиц и т. д.вы все еще можете избежать этого конкретного сравнения вне динамического контекста (сортировки, поскольку переменная существует вне его), используя удобную функцию NULLIF (), например:
NULLIF('''+@SMTPUID +''',''''),
(Примечаниечто строка выше является INSIDE динамическим оператором sql. Единственное, что находится за его пределами, это +@SMTPUID +