SUBSELECT包含错误 - 但sql语句仍在继续

时间:2011-05-31 13:31:26

标签: sql-server tsql

我有以下示例代码:

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 个答案:

答案 0 :(得分:3)

它从外部查询继承member_id,因此相当于:

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

这将按预期失败:

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