程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Code First 迁移 - SQL 更新列包含同一表中另一行的数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Code First 迁移 - SQL 更新列包含同一表中另一行的数据?

开发过程中遇到Code First 迁移 - SQL 更新列包含同一表中另一行的数据的问题如何解决?下面主要结合日常开发的经验,给出你关于Code First 迁移 - SQL 更新列包含同一表中另一行的数据的解决方法建议,希望对你解决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,请注明来意。
标签: