如何解决Code First 迁移 - SQL 更新列包含同一表中另一行的数据
情况:
给出下表:
ID | 价格 | ProductId | ValidFrom |
---|---|---|---|
1 | 1,00 | 1 | 01-01-01 |
2 | 1,00 | 1 | 01-01-15 |
3 | 1,00 | 1 | 01-02-01 |
4 | 1,00 | 2 | 01-01-01 |
5 | 1,00 | 2 | 01-01-11 |
6 | 1,00 | 2 | 01-01-28 |
7 | 1,00 | 2 | 01-02-01 |
8 | 1,00 | 2 | 01-01-08 |
现在我想在表格中添加一个新列“ValidUntil”。因为数据已经存在,所以应该为现有条目预填充新列。
更改后的表格应如下所示:
ID | 价格 | ProductId | ValidFrom | 有效期至 |
---|---|---|---|---|
1 | 1,00 | 1 | 01-01-01 | 01-01-15 |
2 | 1,00 | 1 | 01-01-15 | 01-02-01 |
3 | 1,00 | 1 | 01-02-01 | |
4 | 1,00 | 2 | 01-01-01 | 01-01-11 |
5 | 1,00 | 2 | 01-01-11 | 01-01-28 |
6 | 1,00 | 2 | 01-01-28 | 01-02-01 |
7 | 1,00 | 2 | 01-02-01 | 01-02-08 |
8 | 1,00 | 2 | 01-02-08 |
我使用 Entity Framework Core Code First Migration 来更新数据。
问题:
我首先重命名该列,然后使用以下行预填充该列:
migrationBuilder.sql("UPDATE Prices p1 SET p1.ValidUntil = (SELECT TOP 1 ValidFrom FROM Prices p2 WHERE p2.ValidFrom > p1.ValidFrom ORDER BY DATEDIFF(day,p2.ValidFrom,p1.ValidFrom))");
运行更新时出现以下错误:
'p1' 附近的语法不正确。
ORDER-Keyword 附近的语法不正确。
问题:
我对 sql 语句的经验较少,因此如果您能帮助我了解此语句有什么问题,我将不胜感激。
另外,如果有人有更适合这种情况的陈述,也欢迎他。
感谢您的帮助。
解决方法
您可以使用 lead()
获取截止日期:
select p.*,lead(validfrom) over (partition by productid order by validfrom) as validuntil
from prices p;
在 SQL Server 中,您可以将其合并到 update
中:
with toupdate as (
select p.*,lead(validfrom) over (partition by productid order by validfrom) as new_validuntil
from prices p
)
update toupdate
set validuntil = new_validuntil
where new_validuntil is not null;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。