我使用的是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 |
这些表格有一些注释:
table1.id
是表1和自动递增的主键table1.parentId
是table1.id
列表的一部分。它们是递归的。table2.testid
是表2和自动递增的主键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使用类似的逻辑。
-约翰·