【发布时间】:2012-01-26 09:54:50
【问题描述】:
我们需要创建一个自动化流程来克隆小型 SQL Server 数据库,但在目标数据库中,所有主键都应该与源不同(我们对所有主键使用 UNIQUEIDENTIFIER id)。我们有数千个数据库,它们都具有相同的架构,并且需要使用这个“克隆”过程来创建所有非关键数据匹配但保持引用完整性的新数据库。
有没有简单的方法可以做到这一点?
更新 - 示例:
每个数据库都有大约 250 个需要克隆的事务表。考虑以下几个表及其关系的简单示例(每个表都有一个 UniqueIdentifier 主键 = id):
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。这非常耗时,所以希望有更好的方法。
【问题讨论】:
-
你想带什么类型的数据,主要是查找数据?所以你想克隆你的数据库并克隆所有数据,或者只是查找数据?例如,非关键数据是什么意思?
-
查找数据并不那么重要,因为它总是相同的,我们可以编写脚本(并且它具有固定的整数键)。交易数据是我们主要关心的问题。我会用一个例子来更新 q。
标签: sql-server sql-server-2008 tsql