Sql server BizTalk WCF SQL适配器:如何从具有一对多关系的数据库接收记录

Sql server BizTalk WCF SQL适配器:如何从具有一对多关系的数据库接收记录,sql-server,xml,xsd,biztalk,Sql Server,Xml,Xsd,Biztalk,我已经看过很多教程介绍了如何在BizTalk接收端口中使用WCF SQL适配器从SQL Server数据库中提取数据。但是,当您处理的数据具有一对多关系时,我无法找到有关如何最好地处理此类操作的任何资源 例如,假设我有一个包含三个表的数据库:团队、球员和赞助商。团队表与球员表和赞助商表位于一对多表中。基本上,一支球队可以有很多球员,但一名球员只能属于一支球队。同样,一个团队可以有多个赞助者,但赞助者只能支持一个团队 我希望BizTalk应用程序轮询新的团队记录以及任何相关数据。当添加一个新团队时

我已经看过很多教程介绍了如何在BizTalk接收端口中使用WCF SQL适配器从SQL Server数据库中提取数据。但是,当您处理的数据具有一对多关系时,我无法找到有关如何最好地处理此类操作的任何资源

例如,假设我有一个包含三个表的数据库:团队、球员和赞助商。团队表与球员表和赞助商表位于一对多表中。基本上,一支球队可以有很多球员,但一名球员只能属于一支球队。同样,一个团队可以有多个赞助者,但赞助者只能支持一个团队

我希望BizTalk应用程序轮询新的团队记录以及任何相关数据。当添加一个新团队时,我希望使用一个存储过程来加入该团队以及该团队的所有球员和赞助商。结果XML的XSD当然将允许多个玩家和赞助商记录

从技术上讲,我可以使用FOR XML PATH从存储过程中组装整个XML结构并将其返回到BizTalk应用程序,但这种方法会导致存储过程变得不必要的复杂。(我不是真的在使用这么小的数据库结构。为了简单起见,这只是一个示例。)

这就引出了我的实际问题:从数据库中检索一对多关系中的记录以构建可在BizTalk应用程序中使用的完全实现的XML消息的最佳做法是什么


是否有一种方法仅使用存储过程和WCF SQL适配器就可以做到这一点?我能想到的唯一解决方案是为每个表使用单独的存储过程,然后使用映射或编排将各个部分组装到我的规范模式中。也许这确实是最好的方法,但我非常想知道我是否遗漏了一些非常简单的东西。

您的存储过程应该是这样的

SELECT [TeamName] 
FROM [Team]
WHERE [TeamID] = @NewTeamID

SELECT [PlayerName]
FROM [Player]
WHERE [TeamID] = @NewTeamID 

SELECT [SponsorName] 
FROM [Sponsor]
WHERE [TeamID] = @NewTeamID 

然后通过使用适配器服务从中生成模式。您将得到一个包含三个记录集的模式,然后可以将其映射到更好的模式。

我还没有使用BizTalk,因此这可能是垃圾。。。由于您似乎总是对完整树感兴趣,我建议您创建一个
视图
(或者更好:一个带有参数的
内联函数
),在这里您可以使用
内部联接
绑定表并返回一个平面集。在应用程序级别完成其余工作应该很容易…*非常重要的问题:1。您希望一次检索一个顶级记录,就像单个团队一样,还是像许多团队一样,一批检索。2.1对多层次结构向下延伸了多远。1级为团队->玩家。2个级别是团队->球员->目标。1。我并不是真的拘泥于这两种方法,但由于每个记录都将单独处理,我倾向于一次检索一条记录,而不是在可能的情况下进行批处理。如果配料和脱胶变得更容易,我肯定会倾向于这种方法。2.我将实际处理两个独立但相似的应用程序。在一对多中,一对多将是1层深。另一方面,它将有2层深。我从1级应用开始,完成后会转到另一级。太棒了,谢谢Dijkgraaf!经过一些尝试和错误,我能够使它工作。这里有一些事情要记住,任何人都会犯错误。有一件事我没有引起足够的注意,那就是我有一些包含同名列的连接。正如您可能已经猜到的,我必须稍微重构我的查询以避免这种情况。另一件事是,我的查询中也有临时表,这导致了其他问题。有关这方面的更多信息,请参阅本页: