在一定时间后自动更改 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
的计算列,然后将逻辑放入计算列查询中,以根据 Status
和 Create_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 最佳实践 - 可以依靠自动增量字段按时间顺序对行进行排序吗?