Sql server 克隆带有所有新主键的SQL Server数据库

Sql server 克隆带有所有新主键的SQL Server数据库,sql-server,sql-server-2008,tsql,Sql Server,Sql Server 2008,Tsql,我们需要创建一个自动过程来克隆小型SQL Server数据库,但是在目标数据库中,所有主键都应该与源数据库不同(我们对所有主键使用UNIQUEIDENTIFIER ID)。我们有数千个数据库,它们都具有相同的模式,需要使用这个“克隆”过程来创建新数据库,其中包含所有非关键数据匹配,但仍保持引用完整性 有没有一个简单的方法可以做到这一点 更新-示例: 每个数据库都有大约250个需要克隆的事务表。考虑下面几个表及其关系的简单示例(每个表都有唯一标识符主键=ID): 我们需要克隆数据库的原因是因为办公

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

有没有一个简单的方法可以做到这一点

更新-示例:

每个数据库都有大约250个需要克隆的事务表。考虑下面几个表及其关系的简单示例(每个表都有唯一标识符主键=ID):

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

但是,大多数办公室都希望维护所有患者的病史,因此他们选择“克隆”数据库。新数据库将删除财务历史记录,但将保留所有患者/医生数据。旧数据库将拥有“克隆”之前的所有信息

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


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

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

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

CREATE TABLE Orders
(

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

etc...
现在,当您更新Customer表的CustomerID时,订单表的CustomerID也会更新

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

UPDATE TABLE Customer SET CustomerID = NewID();

您需要使用唯一标识符作为主键对每个表执行此操作。

您可以创建一个集成服务(SSIS)包来执行此操作。您将在控制流中创建新的数据库,然后使用数据流将数据从源复制到目标,这也将替换guid或在此过程中进行其他所需的转换

如果DBs有大量的表,并且只有少数表需要修改,那么您最好只制作MDF/LDF文件的副本,使用新的DB名称重新附加它们,并使用脚本更新ID


使用SSIS的优点是更容易实现完全自动化。缺点是可能需要更长的时间才能完成设置。

您希望带来什么类型的数据,主要是查找数据吗?那么您想克隆数据库并同时克隆所有数据,还是只克隆查找数据?例如,非关键数据是什么意思?查找数据并不重要,因为它总是相同的,我们可以编写脚本(并且它有固定的整数键)。事务数据是我们主要关心的问题。我将用一个例子更新q。
UPDATE TABLE Customer SET CustomerID = NewID();