【问题标题】:How to keep the updated rows for a period of time如何将更新的行保留一段时间
【发布时间】:2020-11-12 15:57:23
【问题描述】:

我正在使用 SQL Server 处理小型项目,我需要您的帮助,以澄清我在某项任务中遇到的问题。

我要做的是更新表中的行并将这些更新的行保留一段时间。

例如我正在使用此代码进行更新:

ALTER PROCEDURE [dbo].[updtprice]
    @bc int,
    @price float
AS
    UPDATE tblproduct 
    SET Price = @price
    WHERE Barcode =  @bc

我要做的是,例如,我将条形码 2233 的产品价格从 0.99 美分更新为 0.70(今天)。我希望价格在一两周后恢复到旧价格(用户设置的某些数据)。

我怎样才能完成这项任务?

谢谢大家

【问题讨论】:

  • 等待两周并运行另一个查询将其改回。
  • 您想要历史记录和带有参数的 TVF,类型为天数、小时数......,应用于历史记录表的滞后。见docs.microsoft.com/en-us/sql/relational-databases/tables/…
  • 在您的价格表中,有一个到期日期列。每天晚上运行一个删除过期价格的作业(即设置“删除标志”。)
  • @JoelCoehoorn 它应该自动运行,因为使用系统的人可能会忘记运行查询。

标签: sql sql-server sql-update


【解决方案1】:

可能还有其他方法可以做到这一点,但听起来您需要另一个表来记录它之前的值和到期日期。然后,您将有一个每天运行的“作业”,它会记录任何过期并将更新回以前的值。

或者您在此表中有额外的列,其中包含特价和到期日期,并且使用该行的任何应用程序都会查看特价,是否还不错,如果是,则使用它,如果不使用正常价格。

【讨论】:

    【解决方案2】:

    说实话,正确执行此操作的唯一方法是:

    1. 编写一个执行此操作的脚本。
    2. 在 MS SQL 中编写计划任务。

    老实说,这两种方法都不是很好的方法。如果它是一个 Web 应用程序,我个人会选择选项 1,如果它只是一个数据库,我会选择选项 2。

    【讨论】:

      【解决方案3】:

      您的表格中可以有 3 列。

      • 实际价格
      • 当前价格
      • price_update_date

      actual_price 列将始终包含产品的准确价格。 您可以用 折扣价 更新 current_price,并在更新 current_price 时更新 strong text price_update_date 列。

      喜欢。

        ALTER procedure [dbo].[updtprice]
        @bc int,
        @price float
      
        as
      
        update tblproduct set current_price= @price,
        price_update_date=SYSDATETIME()
        where
        Barcode =  @bc
      

      然后您可以创建另一个存储的 Proc,它将在每天上午 12 点运行。 并检查 current_time -price_update_date 是否大于或等于您的 threshold,然后使用 actual_price 更新产品的 current_price >

      【讨论】:

        猜你喜欢
        • 2013-11-19
        • 2012-01-06
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        相关资源
        最近更新 更多