在INSERT语句中INSERT并在外部INSERT中使用其ID

时间:2016-12-07 20:28:23

标签: sql sql-server sql-server-2012

假设我有以下表格:

----------------------------------------------------------------
| 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 |
-----------------------

我需要创建一个查询,复制来自ProductsContractId = 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

如何在查询中执行此操作?或者某些存储过程逻辑会有所帮助。我真的不知道如何使这项工作,

0 个答案:

没有答案