如果存在,则存储过程“如果存在则更新其他插入项”

时间:2018-10-05 13:00:01

标签: sql sql-server

我从不同的文章中获得了很多帮助,对此我非常感谢。 但是,现在我有一个情况是我需要您的支持,即与一个SQL过程有关,该SQL过程不仅要检查数据是否存在(用于更新或插入数据,还要与其他2个表进行匹配以检查数据是否匹配)然后在单独的表格中为某些列插入具有不同值的同一行。

我希望更加明确,因此下面的示例希望对您有所帮助

主行数据: db.Table1


|rowID|PurchaseDate|ProducID  | ProductName |   CustomerID |    Qty |   UnitType|
|row1 |09.09.2018  |206       | Prod1       |   1          |    10  |   bl.     |
|row2 |09.09.2018  |207       | Prod2       |   2          |    15  |   bl.     |
|row3 |12.09.2018  |203       | Prod5       |   5          |    5   |   lk.     |
|row4 |15.09.2018  |207       | Prod2       |   6          |    10  |   lk.     |
|row5 |20.09.2018  |207       | Prod2       |   8          |    3   |   Pk.     |
|row6 |20.09.2018  |203       | Prod5       |   8          |    6   |   Pk.     |
|row7 |20.09.2018  |205       | Prod0       |   2          |    5   |   J.      |

与以下项匹配: db.Table2

|CustomerID|    CustomerName|
|1         |    Customer1   |
|2         |    Customer2   |
|3         |    Customer3   |
|4         |    Customer4   |
|5         |    Customer5   |

    

与以下项匹配: db.Table3


|ProducID|  ProductName|    SubProdNAME| |
|205     |  Prod0      |    Prod101    |
|205     |  Prod0      |    Prod202    |
|204     |  Prod01     |    Prod1001   |
|204     |  Prod01     |    Prod2002   |

    

进入决赛桌: db.TableFIN

|rowID| PurchaseDate|ProducID|ProductName|CustomerID|Qty|UnitType |Stage|
|row1 | 09.09.2018  |   206  |  Prod1    |  1       |10 |   bl.   | DONE|
|row1 | 09.09.2018  |   206  |  Prod1    |  1       |10 |   bl.   | NONE|
|row2 | 09.09.2018  |   207  |  Prod2    |  2       |15 |   bl.   | DONE|
|row2 | 09.09.2018  |   207  |  Prod2    |  2       |15 |   bl.   | NONE|
|row3 | 12.09.2018  |   203  |  Prod5    |  5       |5  |   lk.   | DONE|
|row3 | 12.09.2018  |   203  |  Prod5    |  5       |5  |   lk.   | NONE|
|row4 | 15.09.2018  |   207  |  Prod2    |  6       |10 |   lk.   | DONE|
|row4 | 15.09.2018  |   207  |  Prod2    |  6       |0  |   lk.   | NONE|
|row5 | 20.09.2018  |   207  |  Prod2    |  8       |3  |   Pk.   | DONE|
|row5 | 20.09.2018  |   207  |  Prod2    |  8       |0  |   Pk.   | NONE|
|row6 | 20.09.2018  |   203  |  Prod5    |  8       |6  |   Pk.   | DONE|
|row6 | 20.09.2018  |   203  |  Prod5    |  8       |0  |   Pk.   | NONE|
|row7 | 20.09.2018  |   205  |  Prod101  |  3       |5  |   bundle| DONE|
|row7 | 20.09.2018  |   205  |  Prod101  |  3       |5  |   bundle| NONE|
|row7 | 20.09.2018  |   205  |  Prod202  |  3       |5  |   bundle| DONE|
|row7 | 20.09.2018  |   205  |  Prod202  |  3       |5  |   bundle| NONE|

    

所以,基本上我需要根据 Stage 逐行插入数据,第一阶段为 DONE ,第二行为 NONE -另外,如果ConsumerID匹配,则数量值在两种情况下均相等,否则,对于 NONE 值= 0和 DONE 原始值。 FOR ProducID (如果产品与产品匹配),那么我们必须插入4行。如上表所示。再次匹配消费者ID和产品更新/插入阶段/值。

非常感谢您的支持。 预先谢谢你!

0 个答案:

没有答案