sql - 将之前的记录更新为非活动状态
问题描述
我每天都在将数据读入 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 语句的存储过程将记录添加到表中。但是,我无法更新以前记录和新记录的字段。
我将不胜感激任何帮助。
解决方案
这将需要在两个语句中完成:一个是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 评论中提到的“临时表”
推荐阅读
- c++ - 在不使用类名和范围解析运算符的情况下调用方法
- flutter - 编译 arm64 颤振引擎时出错
- r - 在 R 中对数据框进行排序
- reactjs - 字符串的 prop-types 数组与 TypeScript 类型不兼容
- memory - 内存地址寄存器和内存缓冲寄存器是否与其他地址和数据寄存器不同?
- angular - 从对象中的每个项目中获取总计
- amazon-web-services - 对 AWS 弹性 beantalk 强制执行 AES-256
- angularjs - AngularJS轮播具有多个项目和UN等宽
- django - 如何使用 django ORM 删除具有相同值的结果?
- javascript - 无法将 formGroup 与 firebase 错误绑定