Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:我需要从两个表中创建记录的副本,并确保FK反映这些副本_Sql_Sql Server - Fatal编程技术网

SQL Server:我需要从两个表中创建记录的副本,并确保FK反映这些副本

SQL Server:我需要从两个表中创建记录的副本,并确保FK反映这些副本,sql,sql-server,Sql,Sql Server,在SQL Server 2016中,我需要从两个表中创建几乎完全相同的记录副本。唯一的区别是它们的主键,另一个我重置为零的列,以及第二个表中的外键(这是第一个表的主键)。我可以很好地创建两个表的副本,但是我不知道如何为第二个表指定新的FK值,以正确反映第一个表中的新主键 以下是两个表中的当前记录: 表1:批次 +-----------------------+-----------+----------------+------------+ | BatchID (pk identity) |

在SQL Server 2016中,我需要从两个表中创建几乎完全相同的记录副本。唯一的区别是它们的主键,另一个我重置为零的列,以及第二个表中的外键(这是第一个表的主键)。我可以很好地创建两个表的副本,但是我不知道如何为第二个表指定新的FK值,以正确反映第一个表中的新主键

以下是两个表中的当前记录:

表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 |
+-----------------------+-----------+----------------+------------+
+---------+-----------+----------------+------------+
| 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 (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   |
+--------------------------+---------+--------+-----------+-------------+
+------------+---------+--------+-----------+-------------+
| 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        |
+------------+---------+--------+-----------+-------------+
我现在希望创建这些记录的副本,但以下情况除外:

  • 批处理。所有记录的ProcessingStep
    现在将设置为零
  • ItemList
    已处理的
    ProcessDate
    分别重置为零和空
  • 更新
    ItemList.BatchID
    以反映复制的
    批次
    记录的新主键(这就是我遇到的问题)
目前,我更新表格的脚本如下:

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
表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   |
+--------------------------+---------+--------+-----------+-------------+
+------------+---------+--------+-----------+-------------+
| 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
外键


谢谢。

BatchID是身份吗?您可以创建一个临时表,然后使用OUTPUT子句捕获旧的和新的BatchID。然后连接到细节表的insert中。BatchID(和ItemListID)是一个标识,是的。我编辑了我的问题以反映这一点,谢谢。我有身份吗?您可以创建一个临时表,然后使用OUTPUT子句捕获旧的和新的BatchID。然后连接到细节表的insert中。BatchID(和ItemListID)是一个标识,是的。我编辑了我的问题以反映这一点,谢谢