防止用户在数据库表中两次登录



我有一个带有以下列的表:

用户ID,登录时间,注销时间

当用户登录该用户是否已经有一个登录时间的行,但没有注销时间时,他会重新使用该行时,否则会创建一个新的。问题有时是存储过程运行两次,我有两个条目。

在这种情况下,我可以使用约束来防止它成为可能吗?

尝试以下

CREATE TABLE UserLog(
  ID int NOT NULL IDENTITY PRIMARY KEY,
  UserID int NOT NULL,
  LoginTime datetime NOT NULL DEFAULT SYSDATETIME(),
  LogountTime datetime
)
-- unique index with where clause
CREATE UNIQUE INDEX UK_UserLog_UserID ON UserLog(UserID) WHERE LogountTime IS NULL
GO

INSERT UserLog(UserID)
VALUES(1)
-- Cannot insert duplicate key row in object 'dbo.UserLog' with unique index 'UK_UserLog_UserID'. The duplicate key value is (1).
INSERT UserLog(UserID)
VALUES(1)

UPDATE UserLog
SET
  LogountTime=SYSDATETIME()
WHERE UserID=1
  AND LogountTime IS NULL

INSERT UserLog(UserID)
VALUES(1)

SELECT *
FROM UserLog

最新更新