以前我也碰到过这样的问题,看看你的select ItemB from SqlB.DataB.TableB
是不是有 null 值,in 相当于等号,null 不是0不是空 不能与其它值比较,所以即使有符合条件的记录也不会出来。
可用在执行前加上set ansi_nulls off 记得结束后 用set ansi_nulls on 恢复,免得影响其它,或者 用 isnull 转化一下,select * from TableA where ItemA
not in (select isnull(ItemB,'') from SqlB.DataB.TableB)
是不是有 null 值,in 相当于等号,null 不是0不是空 不能与其它值比较,所以即使有符合条件的记录也不会出来。
可用在执行前加上set ansi_nulls off 记得结束后 用set ansi_nulls on 恢复,免得影响其它,或者 用 isnull 转化一下,select * from TableA where ItemA
not in (select isnull(ItemB,'') from SqlB.DataB.TableB)
in 相当于 =SQL-92 标准要求对空值的等于 (=) 或不等于 (<>) 比较取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中存在空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中存在非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍返回零行。当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中含有空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中含有非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有非 XYZ 值和非 NULL的行。