Sql 防止用户在数据库表中登录两次
我有一个包含以下列的表: 用户ID、登录时间、注销时间 当用户登录时,如果该用户已有一行具有登录时间但没有注销时间,则他将使用该行重新登录,否则将创建一个新的。问题是有时存储过程运行两次,我得到两个条目 在这种情况下,我是否可以使用约束条件来阻止它成为可能 试试下面的方法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
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-我很高兴能帮助你)