我们过去每个客户端都有一个数据库,现在我们开始使用单个数据库。我需要找到一种不丢失数据(包括外键)的合并数据库的方法。我的主键都是整数。
我理解的是,唯一的方法是更新除了一个数据库之外的所有主键和所有外键(这样就不会有冲突),然后将它们导入一个新的db中。这是真的吗?
如果是这样,我发现的唯一方法是手动将所有外键设置为可推迟的,然后手动增加所有主键。这是真的吗?有没有办法让它自动进入我所有的主键和外键?
发布于 2021-02-11 02:34:49
我遇到了这个问题。有时候我不得不用困难的方法解决这个问题。但是其他的,我只需取一个足够大的数字,并将它添加到一个数据库中的所有数字键中。然后我把这两个数据库合并。假设我在BD1中的最大键是1213456,那么我在BD2中的所有键中都添加了1000000。
您可以准备查询information_schema的脚本以生成所有修改/更改/更新。类似的东西(只有PK)
SELECT CONCAT('UPDATE ', U.TABLE_SCHEMA,'.', U.TABLE_NAME, ' SET ', U.COLUMN_NAME, ' = ',U.COLUMN_NAME,' + 100000' )
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS C
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U
ON U.CONSTRAINT_NAME = C.CONSTRAINT_NAME
AND U.CONSTRAINT_SCHEMA = C.CONSTRAINT_SCHEMA
AND U.CONSTRAINT_NAME = C.CONSTRAINT_NAME
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY'当您感到足够自信时,将返回像UPDATE dbo.Table1 SET id = id + 100000这样的查询和运行结果查询。祝好运!
https://dba.stackexchange.com/questions/285162
复制相似问题