在一定时间后自动更改 SQL 服务器记录的最佳实践?

Posted

技术标签:

【中文标题】在一定时间后自动更改 SQL 服务器记录的最佳实践?【英文标题】:best practice for change SQL server record automatically, after certain amount of time? 【发布时间】:2021-09-07 20:15:36 【问题描述】:

我目前正在为我的问题寻找最佳实践,

我有这张表 A,对于插入的每条新记录,列 Status 的默认值为 Waiting 。 每条记录都需要有一个“计时器”,在我的例子中是 5 分钟。如果在 5 分钟内没有从Waiting 设置为Completed,则需要为Expired

示例:

| No. | Status   |
| --- | -------  |
| 1   | Expired  |
| 2   | Completed|
| 3   | Waiting  |

完成此任务的最佳方法是什么?无论是其 SQL 服务器方法还是 C# Net。编码方法。

我尝试的是在 SQL Server 中创建一个名为 Status_auto 的计算列,然后将逻辑放入计算列查询中,以根据 StatusCreate_date 设置值。 它按预期工作,但我不确定它是否是一个非常好的方法,因为该表预计会有数千条记录,并且由于这个计算列,我担心稍后在生产中会出现性能问题

【问题讨论】:

我看不出计算列有任何问题,如果这对你有用的话。您可以在加载数百万行的测试表中轻松测试预期性能。另一种方法是运行 SQL 代理作业并更新符合条件的行的状态。 是的,但我最终有 2 个状态列,我不太喜欢它。我也在考虑 SQL 作业,但它需要过于频繁地运行更新查询(可能每 30 秒一次),并且可能不会准确更新每条记录 5 分钟。 【参考方案1】:

将值插入到表中的时间。

然后使用视图计算状态。

视图如下:

create view v_t as 
    select t.*,
           (case when getdate() > dateadd(minute, 5, waiting_start) and
                      status <> 'Completed'
                 then 'Expired'
                 else status
            end) as actual_status
    from t;

如果使用比较来处理,则不需要更新或安排。

【讨论】:

谢谢,我会用这个作为视图来查询数据。然后根据这个视图更新实际的表来同步Status。 @RLHakim 。 . .您可以在方便的时间安排同步 - 服务器不太忙时。

以上是关于在一定时间后自动更改 SQL 服务器记录的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 最佳实践 - 可以依靠自动增量字段按时间顺序对行进行排序吗?

在 AWS RDS 上自动更改 SQL 架构

如何在一定时间后自动删除sql server中的记录[重复]

SQL Server 2008 架构更改的最佳实践

SQLAlchemy + SQL 注入

如何在 Android 上自动保存表单 - 最佳实践