【发布时间】:2020-06-19 17:35:08
【问题描述】:
我有一个通过INSERT INTO 从视图中生成的表。数据如下所示:
Priority ID Status
1 108999_1_S010 Planned
1 108999_1_S020 Planned
1 108996_1_S030 Planned
1 108996_1_S035 Planned
1 108996_1_S040 Planned
1 108996_1_S050 Planned
1 108996_1_S060 Planned
1 108996_1_S070 Planned
1 108996_1_S080 Planned
1 108996_1_S090 Planned
1 108996_1_S100 Planned
1 108996_1_S110 Planned
1 108996_1_S120 Planned
2 108999_2_S010 Planned
2 108999_2_S020 Planned
2 108996_2_S030 Planned
2 108996_2_S035 Planned
2 108996_2_S040 Planned
2 108996_2_S050 Planned
2 108996_2_S060 Planned
2 108996_2_S070 Planned
2 108996_2_S080 Planned
2 108996_2_S090 Planned
2 108996_2_S100 Planned
2 108996_2_S110 Planned
2 108996_2_S120 Planned
3 108999_3_S010 Planned
3 108999_3_S020 Planned
3 108996_3_S030 Planned
3 108996_3_S035 Planned
3 108996_3_S040 Planned
3 108996_3_S050 Planned
3 108996_3_S060 Planned
3 108996_3_S070 Planned
3 108996_3_S080 Planned
3 108996_3_S090 Planned
3 108996_3_S100 Planned
3 108996_3_S110 Planned
3 108996_3_S120 Planned
4 108999_4_S010 Planned
4 108999_4_S020 Planned
4 108996_4_S030 Planned
4 108996_4_S035 Planned
4 108996_4_S040 Planned
4 108996_4_S050 Planned
4 108996_4_S060 Planned
4 108996_4_S070 Planned
4 108996_4_S080 Planned
4 108996_4_S090 Planned
4 108996_4_S100 Planned
4 108996_4_S110 Planned
4 108996_4_S120 Planned
5 110225_1_S010 Planned
5 110225_1_S020 Planned
5 110224_1_S030 Planned
5 110224_1_S035 Planned
5 110224_1_S040 Planned
5 110224_1_S050 Planned
5 110224_1_S060 Planned
5 110224_1_S070 Planned
5 110224_1_S080 Planned
5 110224_1_S090 Planned
5 110224_1_S100 Planned
5 110224_1_S110 Planned
5 110224_1_S120 Planned
Priority 是在使用视图上的 ROW_NUMBER() 函数插入时生成的。从ID 列中可以看到,任何给定顺序都有 14 个子站,因此每个优先级将有 14 个等效数字。这一切都很好,但是该表正在通过 PowerApps 和 Power Automate 不断更新。我对这张表有两个要求:
- 如果一组新订单来自底层源视图,并且它们的
priority是,例如 3,那么我需要将当前订单与priority(3, 4, 5) 全部转换为(4, 5, 6)。 - 如果特定
ID的status列从“已计划”更改为“已完成”,则该行的Priority变为0,并且该站的下一个Priority订单转移到该位置。 (比如ID“108996_2_S030”的订单(priority为2)已经完成,则该订单的priority变为0,订单“108996_3_S030”变为2,后续订单全部变为@ 987654335@。
我想我需要两个单独的存储过程。由视图中的插入和status 列的更改触发。但是,我不确定如何编写它们,以免它们相互干扰。
最初,我打算在每次这些触发器之一时完全重新计算 priority,但需要注意的是,我们还需要能够通过 PowerAppss 手动更改 priority,所以我不想重置这些更改。
有人知道如何编写存储过程来为我实现结果吗?
【问题讨论】:
-
如果一组新的订单以优先级 3 进入,并且几乎在同一时间,另一组以优先级 4 进入的订单,如果第二个更新语句(更新(4,5,6) 条记录)在第一个之前运行?在这种情况下,您可能会得到不同的结果,具体取决于首先运行的更新,这可能不是您想要的。
-
很好,@dcp。这些更新声明将集中在一起,并且必须基于最高的
priority。因此,如果优先级为 3 和 4,则 (3,4,5) 将变为 (5,6,7)。 -
处理一组新订单听起来像是
instead of insert触发器可以优雅地管理的事情。如果新数据和现有数据在Priority上存在冲突,那么它将调整现有行的Priority,然后执行insert。如果没有冲突,它可以简单地insert新数据。我无法理解您的第二个案例Status“已完成”真正想要做什么。 -
@HABO,不幸的是,SQL 触发器不能很好地与 PowerApps 配合使用 :(。我现在必须使用存储过程。我正在考虑将“插入”结果存储在一个临时表中存储过程,然后使用它来构造变量以确定插入表的最后一个
priority。然后我可以使用它来更新顺序超出该变量的任何顺序的priority。想法? -
@HABO,我的问题的第一个要点是指订单的“流”。操作员应该处理第一个订单,然后是第二个订单,依此类推。但是,每个订单都在不同的子装配站单独处理。 “S030”作为一个站会先处理它,然后是“S035”,然后是“S040”等等。所以对于每个单独的工作站,我还想根据正在执行的订单来调整流程。
标签: sql-server tsql ssms powerapps power-automate