为什么Ansi_nulls不起作用?

ngu*_*a02 0 sql sql-server

假设我有两个名为aTable1,aTable2的表

aTable1将userID设置为identity并包含以下数据:

userID  email          FirstName    LastName
1       NULL               C            CC
2       NULL               D            DD
3       a@yahoo.com        A            AA
4       b@yahoo.com        B            BB
5       e@yahoo.com        E            EE
6       f@yahoo.com        NULL         NULL
7       g@yahoo.com        NULL         NULL
Run Code Online (Sandbox Code Playgroud)

aTable2包含以下数据:

userID  email          FirstName    LastName    Title
3       a@yahoo.com      A            AA       student
4       b@yahoo.com      B            BB       student
5       e@yahoo.com      E            EE       student
NULL    NULL             C            CC       dean
NULL    NULL             D            DD       advisor
NULL    f@yahoo.com NULL    NULL               student2
NULL    g@yahoo.com NULL    NULL               student3
Run Code Online (Sandbox Code Playgroud)

我想基于aTable1更新aTable2.userID,但知道2个表中有空值,所以我喜欢这样:

set ANSI_NULLS off
update aTable2
set aTable2.userID = a.userID
from aTable a, aTable2 b 
where a.FirstName = b.FirstName and a.LastName = b.LastName and a.email = b.email
Run Code Online (Sandbox Code Playgroud)

但是,此更新不会更新所有userID,事实上,它只更新那些电子邮件不等于null的那些,但我已经将ANSI_NULLS设置为off.我做错了什么?

GSe*_*erg 5

据记载,它不起作用:

SET ANSI_NULLS ON仅当比较的一个操作数是变量NULL或文字时,才会影响比较NULL.如果比较的两侧都是列或复合表达式,则该设置不会影响比较.