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

Sql 防止用户在数据库表中登录两次,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个包含以下列的表: 用户ID、登录时间、注销时间 当用户登录时,如果该用户已有一行具有登录时间但没有注销时间,则他将使用该行重新登录,否则将创建一个新的。问题是有时存储过程运行两次,我得到两个条目 在这种情况下,我是否可以使用约束条件来阻止它成为可能 试试下面的方法 CREATE TABLE UserLog( ID int NOT NULL IDENTITY PRIMARY KEY, UserID int NOT NULL, LoginTime datetime NOT NUL

我有一个包含以下列的表:

用户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

可能重复的打孔打孔是一个比乍一看要困难得多的问题。根据行的插入顺序进行输入/输出在许多方面都很容易出错。最好从使用数据库的软件中明确指示打孔是在打孔还是在打孔。@Jack Reilly-我很高兴能帮助你)