大佬教程收集整理的这篇文章主要介绍了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;
以上是大佬教程为你收集整理的Code First 迁移 - SQL 更新列包含同一表中另一行的数据全部内容,希望文章能够帮你解决Code First 迁移 - SQL 更新列包含同一表中另一行的数据所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。