数据访问设计:多个结果集单个存储过程或每个存储过程单个结果集

Posted

技术标签:

【中文标题】数据访问设计:多个结果集单个存储过程或每个存储过程单个结果集【英文标题】:Data Access Design: Multiple result set single stored proc or single result set per stored proc 【发布时间】:2013-10-06 12:19:34 【问题描述】:

这是构建复杂对象的更好方法(急切加载)。对返回多个结果集的存储过程的单个调用还是对每个具有一个结果集的存储过程的多次调用?我正在使用 .NET 中的 T4/文本模板构建我的 DAL,所以我倾向于后者。

谢谢!

【问题讨论】:

怀疑这将是您的决定 - 您正在牺牲性能以换取不太复杂/更易于维护的代码。 【参考方案1】:

这取决于您的应用程序的整体架构设计模型。如果您使用的是所谓的Table Data Gateway 或Active Record,那么后者可能会更好。如果您使用的是所谓的域模型或Domain driven Design,那么前者更合适。

【讨论】:

【参考方案2】:

我不记得我们上一次编写一次返回多个结果集的存储过程是什么时候了。很少有它实际上是一个整体的好处。

我能想到做这样的事情的唯一原因是(a)性能——例如。如果 SELECTS 需要临时表或对所有这些都通用的大量设置,或者 (b) 如果数据在调用之间存在更改的风险并且想要使用可序列化的隔离语义。

如果所有的行集都是相互独立的并且没有共同的设置,那么一定要把它们分开。假设您使用的是较低级别的连接协议(例如 TCP/IP 或命名管道,而不是诸如 SQL over XML 之类的聊天技术),那么往返的成本并不是一个真正重要的因素。更重要的是,如果您可以单独调用存储过程,这意味着您可以异步和并行调用它们,如果您愿意的话,甚至可以实现卓越的性能。

【讨论】:

以上是关于数据访问设计:多个结果集单个存储过程或每个存储过程单个结果集的主要内容,如果未能解决你的问题,请参考以下文章

SQL 之存储过程

如何将单个结果集从返回多个集的 SQL 存储过程保存到临时表?

使用 vba 在 MS-Access 前端中来自 MySQL 存储过程的多个结果集?

SQL 存储过程

数据库存储过程和触发器

来自存储过程的多个结果集的 s-s-rS 最佳实践