Sql server 将客户端数据从一个数据库移动到新数据库

Sql server 将客户端数据从一个数据库移动到新数据库,sql-server,Sql Server,我们的应用程序体系结构允许我们在一个数据库中托管多个客户端,也可以托管多个数据库。这使我们能够通过跨多个数据库分发客户端来扩展。例如,数据库A中可以有20个客户机,数据库B中可以有15个客户机。我们在几乎每个表中使用ClientID字段来划分客户机数据。我们表的所有主键都是INT identity TableID字段 我正在寻找一个工具/脚本,可以帮助我从一个数据库中提取客户机数据,并将其移动到一个全新的数据库中(这样PKs就可以保持不变)。我希望这已经存在,这样我们就不必建造自己的。这在工作方

我们的应用程序体系结构允许我们在一个数据库中托管多个客户端,也可以托管多个数据库。这使我们能够通过跨多个数据库分发客户端来扩展。例如,数据库A中可以有20个客户机,数据库B中可以有15个客户机。我们在几乎每个表中使用ClientID字段来划分客户机数据。我们表的所有主键都是INT identity TableID字段

我正在寻找一个工具/脚本,可以帮助我从一个数据库中提取客户机数据,并将其移动到一个全新的数据库中(这样PKs就可以保持不变)。我希望这已经存在,这样我们就不必建造自己的。这在工作方式上非常灵活,但理想情况下,它只生成一个大的.sql文件,其中包含按正确顺序移动数据所需的所有插入,以及另一个sql文件,其中包含从源中删除数据所需的所有删除


如果有任何不同,我们在SQL Server 2008上。

不是你可能正在寻找的答案,但是你应该考虑使用GUID作为一个键。这将确保您的所有记录都具有某种类型的唯一标识符,并且可以避免与标识键/基于整数的索引发生冲突。如果在数据库之间迁移时出现问题,它将增加另一种程度的可跟踪性

SplendidCRM在从其他数据库系统导入数据时使用此技术


更新:

我的假设是,在数据库之间传输数据的操作没有那么频繁,并且您需要数据库体系结构来完成该任务。我将使用GUID作为查找键,专门用于数据传输的验证,但我不会将其用作URL等标准操作的联接的主键。尽管在数据库中是独一无二的,但代价是guid速度慢

换句话说,guid现在将添加到您现有的主键之外,并在出现问题时充当验证手段。如果您需要数据库A中的ClientID在数据库B中保留相同的值,那么作为该标识符的标识列将是一个问题。您可能必须创建另一个非“自动生成”的标识符。这可能是GUID之外的东西,但我的直觉是,仅仅整数是不够的。也许您可以创建一个列,它是标识键、客户名称和数据库名称的散列,或者更简单地说,只是将这些列连接到一个varchar列中。

我可以为此推荐redgate,我们使用它来同步数据,并使用它们来同步数据库架构

这两种工具都可以输出sql,您可以自己执行,也可以自己执行sql脚本

它们有一个命令行版本的工具,所以您可以在部署脚本中使用它们,尽管我还没有尝试过


它们都工作得很好,毫无疑问是物有所值的。

如果您有标准或企业版,那么您确实有SSI。虽然它可能不符合“工具”的条件,但在这种情况下很容易实现。

AndreasN,感谢您的推荐。不过,我要说的是,我没有做任何比较或同步。我想做的是将一批基于ClientID的相关数据从一个数据库移动到一个新数据库。这个工具可以做到这一点吗?您不能使用SQL Server内部的工具来做到这一点吗?SSIS等。不太熟悉SSI。我想我会查一查。大卫,如果你使用GUID键并进行大量连接,会不会有性能折衷?另外,我们没有采用这种方法的一个原因是,我们认为在引用资源时,它会把我们的应用程序URL弄得一团糟。谢谢