当SQLServer判断不等于遇到null的时候

在做定时同步的时候,经常会做比较判断,常用的就是比较不等于就执行同步,但是在使用<>和!=的时候,是不能用来判断是否有null的情况的,<>和!=定义为:比较两个表达式。 当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE。 否则,结果为 FALSE

以下记录了实际发生的情况:

有两个表,一个原始表T_Person,一个需要从原始表同步的表T_SyncPerson,当工号一样且密码不一样时就需要同步,因此最核心的就是写出密码不相等SQL语句

create table T_Person(
	code varchar(20),
	name varchar(20),
	pwd varchar(18),
	state varchar(4)
)
create table T_SyncPerson(
	code varchar(20),
	name varchar(20),
	pwd varchar(18),
	state varchar(4)
)

insert into T_Person(code,name,pwd,state) values('02219666','风徐来','1234','禁用')
insert into T_Person(code,name,pwd,state) values('02219666','风徐来','1111','启用')

insert into T_SyncPerson(code,name,pwd,state) values('02219666','风徐来',null,'启用')

表中的数据有如下

最初的查询密码不同的语句如下

SELECT p.*
FROM   T_Person p,
       T_SyncPerson s
WHERE  p.code = s.code
       AND p.state = '启用'
       AND s.state = '启用'
       AND p.pwd <> s.pwd 

执行后

没有数据

因此在比较的时候,遇到有null值需要特别注意,当然在设计表的时候,尽可能的不要使用null,可以用一个默认值代替null,null值代表的是未知数

最后修改的SQL语句如下

SELECT p.*
FROM   T_Person p,
       T_SyncPerson s
WHERE  p.code = s.code
       AND p.state = '启用'
       AND s.state = '启用'
       -- AND p.pwd <> s.pwd
       AND ( 
               ( p.pwd IS NULL     AND s.pwd IS NOT NULL )
            OR ( p.pwd IS NOT NULL AND s.pwd IS NULL )
            OR ( p.pwd <> s.pwd ) 
       )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

svygh123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值