在SQL Server 2005中寻求模块化 - 将多个记录集返回到存储过程

时间:2009-08-06 11:39:09

标签: sql tsql sql-server-2005 stored-procedures

我有几次这个问题并以同样的方式解决了。但它并不漂亮,我想知道是否有人知道任何更优雅的东西...

基本目标:
- 我有一段代码在整个许多存储过程中很常见 - 出于维护目的,我喜欢模块化 - 所以我想把这个共同的代码放在它自己的存储过程中 - 所有其他存储过程都会调用该存储过程 - 嘿presto,模块化,可重复使用,可维护的代码。

复杂问题:
- 公共代码生成两个记录集/表
- 存储过程或函数无法将两个表返回到存储过程中 - 在单独的函数中生成两个表将显着降低性能   (这会导致重大的冗余重新计算)


历史上使用的解决方案:

1>在外部SP中创建#Temp表 - 中心代码插入#temp表
- 允许返回任意数量的数据集
- 如果将新列添加到数据中,则还要修改每个外部SP。

2 - ;创建真实表格以插入数据。
- 如果将新列添加到数据中,则只需更改一组表定义 - 需要“会话ID”来区分“我的数据”和另一个流程数据 - 错误等可能会将旧数据留在表格中,需要每晚进行清理 - 使数据库变得杂乱无章。

第一个选项更接近模块化目标。逻辑变化只需要在一个地方进行。但是其他列等需要识别使用SP的每一段代码并更新#temp表定义。

第二种选择使它更加优雅,但引入了大量新的考虑因素,再次破坏了优雅。


仅使用SQL Server 2005,有更好的选择吗? (在SQL Server 2000中工作也是一种奖励。)


干杯, 垫。

2 个答案:

答案 0 :(得分:4)

以下链接可能对您有用:

http://www.sommarskog.se/share_data.html

答案 1 :(得分:1)

叹息,如果没有SQL 2008,这将是徒劳的。哦,BTW,Erland的帖子(上图)是我要去的所有选项列表...