使用自动递增和递归数据复制SQL Server数据



我使用的是SQL Server 2008,有两个表,如:

表1:

| id   | value | parentId |
+------+-------+----------+
|  1   | pra1  |     2    |
|  2   | 3tes  |     3    |
|  3   | 4tes  |     4    |
|  5   | pra2  |     1    |
|  6   | 3tes  |     3    |
|  7   | pra6  |     2    |

表2:

| testid | subject | value |
+--------+---------+-------+
|   1    |    5    | case1 |
|   2    |    5    | case2 |
|   3    |    7    | case3 |

这些表格有一些注释:

  1. table1.id是表1和自动递增的主键

  2. table1.parentIdtable1.id列表的一部分。它们是递归的。

  3. table2.testid是表2和自动递增的主键

  4. table2.subject是表2的外键,是指table1.id

我想将这两个表的数据复制到另一个数据库中。如何编写一些脚本来复制数据并自动为这些表分配ids/parentId。

如果要插入到新数据库中,并且需要维护两个表上的主键、自动递增和外键约束,则需要导出值。例如Table1,在新数据库中,您需要添加Table1.parentValue,并确保parentID是一个可以为null的字段。

Insert into DB2.Table1 (value, parentvalue) 
SELECT o.value, p.value 
FROM DB1.Table1 o
LEFT JOIN DB1.Table1 p on p.parentId = o.ID

你的桌子看起来是这样的:

| id   | value | parentId | parentValue|
+------+-------+----------+------------+
|  1   | pra1  |  NULL    | 3tes       |
|  2   | 3tes  |  NULL    | 4tes       |
|  3   | 4tes  |  NULL    | NULL       | <-- there is ID 4 above.
|  5   | pra2  |  NULL    | par1       |
|  6   | 3tes  |  NULL    | 4tes       |
|  7   | pra6  |  NULL    | 3tes       |

然后";回填";parentID

UDPATE o set o.parentID = p.ID FROM DB2.Table1 o INNER JOIN DB2.Table1 p WHERE p.parentvalue = o.value

删除parentValue列,并对Table2使用类似的逻辑。

-约翰·

相关内容

  • 没有找到相关文章

最新更新