110,535
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('dbo.meetingRoom') IS NOT NULL
DROP TABLE dbo.meetingRoom
GO
CREATE TABLE dbo.meetingRoom(
roomId INT IDENTITY(1,1) PRIMARY KEY,
roomName NVARCHAR(50) NOT NULL,
isScheduled BIT NOT NULL DEFAULT(0), --是否预定
scheduledTime DATETIME NOT NULL DEFAULT(0), --预定时间
scheduledUsedId INT NOT NULL DEFAULT(0), --预定人
beginTime DATETIME NOT NULL DEFAULT(0), --会议开始时间
endTime DATETIME NOT NULL DEFAULT(0) --会议结束时间
)
--插入一条记录(会议室)
INSERT INTO dbo.meetingRoom(roomName) VALUES('会议室1')
--界面上操作时取出所有未被预定的记录
SELECT * FROM dbo.meetingRoom WHERE isScheduled=0
--roomId = 1 isScheduled=0 scheduledTime='1900-01-01'
--前端选中 roomId = 1 isScheduled = 0 scheduledTime='1900-01-01' 这条记录并将其改为预定状态
--因为更新时数据库会自动锁定这条记录,再多并发只可能有一条记录被更新
--如果 ExecuteNonQuery 的值为0,则前端说明此房间已被预定即可。
UPDATE dbo.meetingRoom
SET isScheduled=1,scheduledTime=GETDATE(),scheduledUsedId=1
WHERE roomId = 1
AND isScheduled = 0
--会议室用完,自动将更新为可预定
UPDATE dbo.meetingRoom
SET isScheduled=0,scheduledTime='1900-01-01'
WHERE isScheduled=1 AND endTime<GETDATE()
--如果想完全不用数据库, 其实思路也是可以借鉴的,lock 之后取 list 中的 未被预定的 记录,
--如果取不到就说明被人抢定了。