SQL Server 2005 - 在主键发生更改时在两个数据库之间移动数据的最佳方法

时间:2008-10-17 05:12:37

标签: c# database sql-server-2005 data-migration

我知道这应该是db 101,但它对我来说并不是那么清楚。我正在使用SQL2005 express,我想将数据从databaseA复制到databaseB。 DatabaseB已经包含现有数据 - 它甚至可能包含pk已更改或不存在的数据 - 例如:

数据库A. pk1 =桃子 pk2 =苹果

DataBase B. pk1 =桃子 pk2 =橙子 pk3 =苹果

现在A& B有与pk相关的相关表。

历史上我会写一个应用程序从A中选择数据并通过其插入/更新过程(使用.NET)将其复制到B,但是这很麻烦,有些优点是我可以有一个下拉列表允许您可以选择A进行复制 - 如果B存在则复制到B,或者说添加新 - 例如:

(下拉菜单 - 选择来源) 桃子 苹果

(下拉菜单 - 选择目标) -新- 桃子 桔子 苹果

我打算使用SSIS,但是目标数据库只有SQL express,所以这个不可用,也没时间学习它(我过去使用了很多dts,但不是这个新工具)。在SQL2000中,我只会使用DTS,但现在使用更复杂的架构甚至不能确定我会相信它。

是否有任何建议或我应该继续编写自定义应用以将数据从A迁移到B?

我期待着每个人的建议 - 我希望继续走下一条我认为最好的方法: - )

4 个答案:

答案 0 :(得分:1)

如果服务器在同一网络上,则添加链接服务器(在线查找transact sql书籍)。然后,您可以跨两个服务器运行查询。

SQL Server 2005 Express很糟糕,它不包含SSIS。但是,您也可以使用BCP(批量复制,也可以在联机交易sql书籍中查找)将数据复制到目标服务器上的不同表中。它可能在你的路径中,所以从dos你可以输入bcp /?获取选项列表。一旦数据在目标服务器上的表中,您就可以对其运行查询。

您需要在键之间创建映射。我不知道如何从桃子/苹果中获得桃子/橘子/苹果。毫无疑问,存在一些商业逻辑。链接服务器或在一台服务器上获取数据后。您可以使用业务逻辑将旧主键映射到新键。或者手动填写的映射表(oldkey,newkey)或(oldkey1,oldkey2,newkey1,newkey2,newkey3)。

答案 1 :(得分:1)

sql 2008有一个名为Change Data Capture的有趣功能,可能对你来说很有意思 http://blog.benhall.me.uk/2007/06/sql-server-2008-change-data-capture-cdc.html

答案 2 :(得分:0)

不熟悉SQL Server Express的限制,但您可以备份吗?然后导入另一个数据库?

答案 3 :(得分:0)

您可能会考虑合并复制 - http://msdn.microsoft.com/en-us/library/ms165713(SQL.90).aspx

它总是单向推动吗? A-> B

作为一个注释,如果你能得到SSIS,你应该花一点时间来学习它。它比DTS imho好。