sql server 2008 - 操作日期 - 周窗口

时间:2010-10-29 18:42:39

标签: sql-server

如果我想确保一个操作只能由用户每周进行一次,那么有效的方法是什么?如果用户在星期五进行了该操作,那么他仍然可以在星期二进行,因为它是“下一周”。

3 个答案:

答案 0 :(得分:1)

您的用户无法直接访问您的数据库服务器,有一个用于执行此操作的UI ...是否正确?

因此,有效的方法是在表中使用“OperationLastPerformed”(类型为`datetime)列,并在执行操作时填充该字段。

此时,您的UI使用了哪种编程语言,从您的代码中强制执行该业务逻辑将非常容易(并且正确)...

如果这是不可接受的,并且必须从后端完成,您可以创建一个触发器,在提交记录之前检查“OperationLastPerformed”字段,如果日期时间在当前周内,则回滚提交...

答案 1 :(得分:0)

从一般意义上讲,你可以做到这一点。它假设一个历史表至少有一列[Last_Date_Ran]

  1. 开始流程
  2. 检查历史记录表中当前Sun-Sat
  3. 中的日期
  4. 如果某个记录在步骤2中退出,则退出执行流程。

答案 2 :(得分:0)

创建一个存储用户操作历史记录的表:

CREATE TABLE UserActions (
   userId int,
   weekOfYear int,
   year int
)

要检查用户是否在同一周内执行了某项操作,您可以使用DATEPART功能来确定一周:

IF EXISTS (SELECT * FROM UserActions WHERE userId = @userID and weekOfYear = DATEPART(isowk, GetDate() AND year = Year(GetDate()

如果返回NULL,则表示用户未在当前周执行任何操作。然后,您可以在执行操作后插入一行。

INSERT INTO UserActions (userId, weekOfYear int, year) 
VALUES (@userId, DATEPART(isowk, GetDate(), Year(GetDate())