首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克隆Server数据库w/所有新的主键

克隆Server数据库w/所有新的主键
EN

Stack Overflow用户
提问于 2011-12-22 20:19:00
回答 2查看 210关注 0票数 3

我们需要创建一个自动的过程来克隆小型SQL Server数据库,但是在目标数据库中,所有主键都应该与源不同(我们对所有主键使用UNIQUEIDENTIFIER ids )。我们有数千个数据库,它们都有相同的模式,需要使用这个“克隆”过程来创建具有所有非键数据匹配的新数据库,但是引用完整性得到了维护。

有什么简单的方法吗?

更新-示例:

每个数据库都有大约250个需要克隆的事务性表。考虑以下几个表及其关系的简单示例(每个表都有一个UniqueIdentifier主键= id):

代码语言:javascript
复制
location
doctor
  doctor_location (to doctor.id via doctor_id, to location.id via location_id)
patient
  patient_address (to patient.id via patient_id)
  patient_medical_history (to patient.id via patient_id)
  patient_doctor (to patient.id via patient_id, to doctor.id via doctor_id)
  patient_visit (to patient.id via patient_id)
  patient_payment (to patient.id via patient_id)

我们需要克隆数据库的原因是由于办公室被收购或所有权的改变(由于伙伴关系的变化,这种情况相对频繁发生)。当发生这种情况时,办公室的税务和保险信息会发生变化。从法律上讲,这需要一个全新的公司结构,办公室之间的财务需要完全分开。

然而,大多数办公室都希望保留所有的病历,所以他们选择“克隆”数据库。新数据库将删除财务记录,但将保留所有病人/医生数据。旧的数据库将拥有“克隆人”的全部信息。

需要新的GUID的原因是,为了报告目的,我们将所有数据库合并到一个关系数据库中。因为所有事务性表都有GUID,所以这很好.除了克隆人的情况。

到目前为止,我们唯一的解决方案是将数据库转储到文本文件中,并搜索和替换GUID。这是荒谬的时间消耗,所以希望有一个更好的方法。

EN

回答 2

Stack Overflow用户

发布于 2011-12-22 20:55:43

为此,我将创建数据库的基本还原,并将主键中的所有值更新为新的GUID。

要使它自动更新所有外键,需要使用叶栅关键字向数据库添加约束,即

代码语言:javascript
复制
CREATE TABLE Orders
(

    OrderID uniqueidentifier,
    CustomerID uniqueidentifier REFERENCES Customer(CustomerID) ON UPDATE CASCADE,

etc...

现在,当您更新Customer表的CustomerID时,Order表的CustomerID也会被更新。

您可以使用简单的update查询对整个表执行此操作:

代码语言:javascript
复制
UPDATE TABLE Customer SET CustomerID = NewID();

您需要对每个表执行此操作,并将其作为主键。

票数 0
EN

Stack Overflow用户

发布于 2011-12-27 00:02:44

为此,可以创建Integration (SSIS)包。您将在控制流中创建新的数据库,然后使用数据流将数据从源复制到目的地,数据流还将替换GUID或进行其他所需的转换。

如果DB有大量表,并且只需要修改其中的几个表,那么最好只复制MDF/LDF文件,用新的DB名称重新附加它们,并使用脚本更新ID。

使用SSIS的优点是更容易完全自动化。缺点是,可能需要更长的时间才能把事情做好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8609271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档