更新空单元 - 这个存储过程不起作用 - 为什么?

时间:2009-12-10 22:15:32

标签: sql sql-server null

我正在做健身房软件。我有一个登录注销系统。当会员登录时,这个数据放在一个表格中,使登出colomn为空。然后当会员退出登出单元格时更新。到这里很好。但如果成员登录和退出两次,我不希望第一次更改的sigout时间。我想只更新空单元格或登录时间最大值。我有以下存储过程没有错误,但当运行nothin发生在注销单元格!

ALTER proc [dbo].[updateSignOutMem]
@ID nvarchar(50), @signOut nvarchar(50),@date nvarchar(50)
as
update [DateTable]
set SignOut  = @signOut 

where ID = @ID AND [Date] = @date and SignOut = null ; 

2 个答案:

答案 0 :(得分:3)

解决方案:将SignOut = null替换为SignOut IS NULL

为什么:与NULL的比较始终返回NULL,并且将计算结果为NULL的WHERE子句视为FALSE。例如,SELECT * FROM myTable WHERE NULL = NULL将返回零记录而不是整个表。

解释NULL值是“未知”值,因此比较两个未知值的结果也是未知的。这个三值逻辑(真,假,未知)的描述可以be found on Wikipedia


PS :SQL Server提供的much more data types不仅仅是nvarchar(50)。使用它们! : - )

答案 1 :(得分:1)

尝试写作

SignOut IS null