SQL Server: мне нужно создать копии записей из 2 таблиц и убедиться, что FK отражает эти копии - PullRequest
1 голос
/ 21 мая 2019

В SQL Server 2016 мне нужно создавать почти точные копии записей из 2 таблиц. Единственным отличием будут их первичные ключи, еще один столбец, который я сбрасываю на ноль, и внешний ключ в моей 2-й таблице (это PK моей 1-й таблицы). Я могу создать копии обеих таблиц, но я не знаю, как назначить новые значения FK для 2-й таблицы, чтобы правильно отразить новые первичные ключи из 1-й таблицы.

Вот текущие записи в обеих таблицах:

Таблица 1: Партии

+-----------------------+-----------+----------------+------------+
| BatchID (pk identity) | StartDate | ProcessingStep | BatchCount |
+-----------------------+-----------+----------------+------------+
|                     1 | 5/10/2019 |              2 |       8203 |
|                     2 | 5/11/2019 |              2 |        345 |
|                     3 | 5/12/2019 |              2 |       5014 |
+-----------------------+-----------+----------------+------------+

Таблица 2: ItemList

+--------------------------+---------+--------+-----------+-------------+
| ItemListID (pk identity) | BatchID | ItemID | Processed | ProcessDate |
+--------------------------+---------+--------+-----------+-------------+
|                     1000 |       1 |    201 |         1 | 5/10/2019   |
|                     1001 |       1 |    689 |         1 | 5/10/2019   |
|                     1002 |       2 |    548 |         1 | 5/11/2019   |
|                     1003 |       2 |    693 |         1 | 5/11/2019   |
|                     1004 |       3 |    123 |         1 | 5/12/2019   |
|                     1005 |       3 |    999 |         1 | 5/12/2019   |
+--------------------------+---------+--------+-----------+-------------+

Теперь я хочу создать копии этих записей со следующими исключениями:

  • Batches.ProcessingStep для всех записей теперь будет установлен на ноль
  • ItemList Processed & ProcessDate сбрасываются в ноль и ноль соответственно
  • Обновление ItemList.BatchID, чтобы отразить новый PK скопированных Batches записей (вот где у меня проблемы)

В настоящее время мой скрипт для обновления моих таблиц выглядит следующим образом:

INSERT INTO Batches(StartDate, ProcessingStep, BatchCount)
    SELECT StartDate, 0, BatchCount 
    FROM Batches 
    WHERE BatchID IN (1,2,3)

INSERT INTO ItemList(BatchID, ItemID, Processed, ProcessDate)
     SELECT <<?? not sure ??>>, ItemID, 0, NULL 
     WHERE ItemListID BETWEEN 1000 AND 1005

И вот мои окончательные результаты:

Таблица 1: Партии

+---------+-----------+----------------+------------+
| BatchID | StartDate | ProcessingStep | BatchCount |
+---------+-----------+----------------+------------+
|       1 | 5/10/2019 |              2 |       8203 |
|       2 | 5/11/2019 |              2 |        345 |
|       3 | 5/12/2019 |              2 |       5014 |
|       4 | 5/10/2019 |              0 |       8203 |
|       5 | 5/11/2019 |              0 |        345 |
|       6 | 5/12/2019 |              0 |       5014 |
+---------+-----------+----------------+------------+

Таблица 2: ItemList

+------------+---------+--------+-----------+-------------+
| ItemListID | BatchID | ItemID | Processed | ProcessDate |
+------------+---------+--------+-----------+-------------+
|       1000 |       1 |    201 |         1 | 5/10/2019   |
|       1001 |       1 |    689 |         1 | 5/10/2019   |
|       1002 |       2 |    548 |         1 | 5/11/2019   |
|       1003 |       2 |    693 |         1 | 5/11/2019   |
|       1004 |       3 |    123 |         1 | 5/12/2019   |
|       1005 |       3 |    999 |         1 | 5/12/2019   |
|       1006 |       4 |    201 |         0 | NULL        |
|       1007 |       4 |    689 |         0 | NULL        |
|       1008 |       5 |    548 |         0 | NULL        |
|       1009 |       5 |    693 |         0 | NULL        |
|       1010 |       6 |    123 |         0 | NULL        |
|       1011 |       6 |    999 |         0 | NULL        |
+------------+---------+--------+-----------+-------------+

Как мне правильно заполнить этот ItemList.BatchID внешний ключ?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...