开发者社区> 问答> 正文

将关系数据从数据库复制到数据库

编辑:让我完全改写一下,因为我不确定是否有像我最初描述的那样的XML方式。

另一个编辑:这需要是一个可重复的过程,并且必须能够以可以在C#代码中调用的方式进行设置。

在数据库A中,我有一组与PK和FK相关的表。假设有一个父表以及子表和孙表。

我想将一组行从数据库A复制到具有相同名称的表和字段的数据库B中。对于每个表,我都希望插入数据库B中的同一表中。但是,我不必受限于使用相同的主键。 复制例程必须为数据库B中的每一行创建新的PK,并且必须将这些PK传播到子行。换句话说,我保持数据之间的关系相同,但是不完全相同的PK和FK。

您将如何解决?我愿意提出建议。SSIS并未完全被排除在外,但在我看来,它并不会做完全正确的事情。我也愿意使用LINQ解决方案,或者使用类型化的数据集,或者使用一些XML,或者几乎可以在SQL Server 2005和/或C#(.NET 3.5)中使用的任何东西。最好的解决方案不需要SSIS,也不需要编写大量代码。但是我承认这种“最佳”解决方案可能不存在。

(我没有自己做这个任务,也没有约束;这是我的工作方式。)

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 14:48:24 464 0
1 条回答
写回答
取消 提交回答
  • 首先,让我说SSIS是您最好的选择。但是,要回答您提出的问题...

    我不相信您将能够摆脱创建新ID的麻烦,尽管您可以,但是您将需要使用原始ID进行查找。

    最好的获取方式是为表插入一条语句。这是SELECT从XML样本获取数据的代码示例:

    declare @xml xml set @xml=' '

    select t.b.value('./@Key', 'int') PeopleKey, t.b.value('./@FirstName', 'nvarchar(50)') FirstName, t.b.value('./@LastName', 'nvarchar(50)') LastName from @xml.nodes('//People') t(b)

    select t.b.value('../../@Key', 'int') PeopleKey, t.b.value('./@Street', 'nvarchar(50)') Street, t.b.value('./@City', 'nvarchar(50)') City, t.b.value('./@State', 'char(2)') [State], t.b.value('./@Zip', 'char(5)') Zip from @xml.nodes('//Addresses') t(b)

    这是从XML中获取Nodes并解析出数据。为了从人们那里获得关系ID,我们使用../../进行链接。

    2019-11-18 14:48:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载