我有以下示例代码:
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)
最佳答案
它从外部查询继承了member_id
,因此等效于:
...
(select Members.member_id from #tempmembers)
这将按预期失败:
...
(select #tempmembers.member_id from #tempmembers)