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