假设我有以下表格:
----------------------------------------------------------------
| Products |
----------------------------------------------------------------
| id | ContractId | Name | Price | SpecialPriceId |
----------------------------------------------------------------
| 1 | 2002 | Apple | 1.10 | 300 |
| 2 | 2002 | Banana | 1.30 | 301 |
| 3 | 4500 | Orange | 1.30 | 302 |
| 4 | 2002 | Strawberry | 1.20 | 303 |
----------------------------------------------------------------
-----------------------
| SpecialPrice |
-----------------------
| id | Price | Vat |
-----------------------
| 300 | 0.80 | 6.00 |
| 301 | 0.90 | 6.00 |
| 302 | 0.90 | 6.00 |
| 303 | 0.85 | 6.00 |
-----------------------
我需要创建一个查询,复制来自Products
表ContractId = 2002
的所有记录。这些副本应作为新记录插入同一表中。
但,有一个棘手的部分。对于每个新的Product
记录,它还应创建其对应SpecialPrice
记录和INSERT的副本,并将其复制为新记录。
所以最终的结果应该是:
----------------------------------------------------------------
| Products |
----------------------------------------------------------------
| id | ContractId | Name | Price | SpecialPriceId |
----------------------------------------------------------------
| 1 | 2002 | Apple | 1.10 | 300 |
| 2 | 2002 | Banana | 1.30 | 301 |
| 3 | 4500 | Orange | 1.30 | 302 |
| 4 | 2002 | Strawberry | 1.20 | 303 |
| 5 | 2003 | Apple | 1.10 | 304 |
| 6 | 2003 | Banana | 1.30 | 305 |
| 7 | 2003 | Strawberry | 1.20 | 306 |
----------------------------------------------------------------
-----------------------
| SpecialPrice |
-----------------------
| id | Price | Vat |
-----------------------
| 300 | 0.80 | 6.00 |
| 301 | 0.90 | 6.00 |
| 302 | 0.90 | 6.00 |
| 303 | 0.85 | 6.00 |
| 304 | 0.80 | 6.00 |
| 305 | 0.90 | 6.00 |
| 306 | 0.85 | 6.00 |
-----------------------
我能做的只是插入Products
的副本。
INSERT INTO [Products]
(ContractId, Name, Price, SpecialPriceId)
SELECT (2003, Name, Price, SpecialPriceId)
WHERE ContractId = 2002
但我需要做这样的事情:
INSERT INTO [Products]
(ContractId, Name, Price, SpecialPriceId)
SELECT (2003, Name, Price, ( SELECT 'old' [SpecialPrice] record, then INSERT new record in [SpecialPrice] and use new ID here ))
WHERE ContractId = 2002
如何在查询中执行此操作?或者某些存储过程逻辑会有所帮助。我真的不知道如何使这项工作,