编辑:让我完全改写一下,因为我不确定是否有像我最初描述的那样的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
首先,让我说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,我们使用../../进行链接。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。