首页 > 解决方案 > 将之前的记录更新为非活动状态

问题描述

我每天都在将数据读入 SQL。当我将数据读入 SQL 时,我需要跟踪记录何时更改。这是通过“记录版本”、“生效日期”和“IsActive”列完成的 - 如下所示。

ID 姓名 记录版本 生效日期 活跃
1 欧盟 1 2020/01/01 1

添加新记录版本时,需要将之前的记录更改为'IsActive' = 0,并且添加的新记录需要有一个增加1的记录版本,并且字段'IsActive'需要更新为1 -如下表所示。

ID 姓名 记录版本 生效日期 活跃
1 欧盟 1 2020/01/01 0
1 欧洲 2 2021/01/01 1

我目前能够通过带有 INSERT INTO 语句的存储过程将记录添加到表中。但是,我无法更新以前记录和新记录的字段。

我将不胜感激任何帮助。

标签: sqlsql-servertsqlstored-proceduresazure-sql-database

解决方案


这将需要在两个语句中完成:一个是UPDATE针对过时的记录,另一个是INSERT针对新的记录。

假设“将数据读入表”的过程具有新记录的 ID,它看起来像这样:

UPDATE <table>
   SET IsActive = 0
 WHERE ID = @recordID
       AND IsActive = 1;

紧随其后的是一个单一的书面声明:

INSERT INTO <table> 
       (ID, Name, RecordVersion, EffectiveDate, IsActive)
VALUES (@ID, @Name, @RecordVersion, @EffectiveDate, 1);

这是一种通用方法,还有其他方法可以INSERT根据您的使用情况来构建。

您还应该考虑将此操作包含在显式中是否合适,TRANSACTION以及通过TRY-CATCH

关于同一主题的更高级主题是@Larnu 评论中提到的“临时表”


推荐阅读