Основываясь на ваших пояснениях в комментариях, я думаю вы хотите проверить следующие 2 условия:
Условие 1: User
запись существует, но user_id
равна нулю
select 1
from UserAccount UA
inner join Contact as C on UA.email = C.email and C.[type] = 'Director'
where C.InvId = @InvId
-- User Record exists
and exists (select 1 from Users U where U.email = UA.email)
-- user_id is null
and UA.[user_id] is null
Условие 2: User
запись не существует
select 1
from UserAccount UA
inner join Contact as C on UA.email = C.email and C.[type] = 'Director'
where C.InvId = @InvId
-- User Record doesn't exist
and not exists (select 1 from Users U where U.email = UA.email)
Их можно объединить с OR
для проверки обоих условий следующим образом:
declare @userExists int;
if exists (
select 1
from UserAccount UA
inner join Contact as C on UA.email = C.email and C.[type] = 'Director'
where C.InvId = @InvId
and (
(UA.[user_id] is null and exists (select 1 from Users U where U.email = UA.email))
or not exists (select 1 from Users U where U.email = UA.email)
)
)
begin
set @userExists = 1;
end;
Кроме того, должна ли переменная действительно называться @userExists
? Разве это не @userNotExists
?
Примечание 1. Было бы полезно узнать, для чего вы тогда используете переменную @userExists
- например, если вы используете ее для обновления записи, то, скорее всего, обновление и тестирование можно объединить в одно утверждение.
Примечание 2: Я должен предположить, что это только для целей тестирования? Потому что присоединение по адресу электронной почты не является рекомендуемой практикой - если вы не готовы наложить уникальное ограничение на адрес электронной почты, но некоторые люди все еще разделяют адрес электронной почты.
Примечание 3: Рекомендуется соблюдать согласованность в таблице указано, используете ли вы форму единственного или множественного числа. Вы использовали Users
(множественное число) и Contact
(единственное число).