SUBSELECT содержит ошибку - но SQL-оператор продолжается - PullRequest
3 голосов
/ 31 мая 2011

У меня есть следующий пример кода:

create table #tempmembers (
    memberid int
)

update Members set 
Member_EMail = NULL
where Member_ID in (select member_id from #tempmembers)

Подвыбор содержит ошибку, поскольку #tempmembes не содержит столбец с именем member_id, но операторы sql запускаются БЕЗ любых ошибок и не обновляют строки.

Если я добавлю только одну строку к #tempmembers:

create table #tempmembers (
    memberid int
)
insert into #tempmembers select 1

update Members set 
Member_EMail = NULL
where Member_ID in (select member_id from #tempmembers)

он по-прежнему работает без ошибок, но на этот раз это повлияет на ВСЕ записи членов.

Почему оператор SQL не завершается неудачей полностью? И если неудачный подвыбор оценивается как NULL - обновление всех строк в Members должно происходить не только в том случае, если это было:

update Members set 
Member_EMail = NULL
where Member_ID not in (select member_id from #tempmembers)

1 Ответ

3 голосов
/ 31 мая 2011

Он наследует member_id от запроса external , поэтому эквивалентен:

   ...
   (select Members.member_id from #tempmembers)

Это не удастся, как ожидалось:

   ...
   (select #tempmembers.member_id from #tempmembers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...