我有几次这个问题并以同样的方式解决了。但它并不漂亮,我想知道是否有人知道任何更优雅的东西...
基本目标:
- 我有一段代码在整个许多存储过程中很常见
- 出于维护目的,我喜欢模块化
- 所以我想把这个共同的代码放在它自己的存储过程中
- 所有其他存储过程都会调用该存储过程
- 嘿presto,模块化,可重复使用,可维护的代码。
复杂问题:
- 公共代码生成两个记录集/表
- 存储过程或函数无法将两个表返回到存储过程中
- 在单独的函数中生成两个表将显着降低性能
(这会导致重大的冗余重新计算)
历史上使用的解决方案:
1>在外部SP中创建#Temp表
- 中心代码插入#temp表
- 允许返回任意数量的数据集
- 如果将新列添加到数据中,则还要修改每个外部SP。
2 - ;创建真实表格以插入数据。
- 如果将新列添加到数据中,则只需更改一组表定义
- 需要“会话ID”来区分“我的数据”和另一个流程数据
- 错误等可能会将旧数据留在表格中,需要每晚进行清理
- 使数据库变得杂乱无章。
第一个选项更接近模块化目标。逻辑变化只需要在一个地方进行。但是其他列等需要识别使用SP的每一段代码并更新#temp表定义。
第二种选择使它更加优雅,但引入了大量新的考虑因素,再次破坏了优雅。
仅使用SQL Server 2005,有更好的选择吗? (在SQL Server 2000中工作也是一种奖励。)
干杯, 垫。
答案 0 :(得分:4)
以下链接可能对您有用:
答案 1 :(得分:1)
叹息,如果没有SQL 2008,这将是徒劳的。哦,BTW,Erland的帖子(上图)是我要去的所有选项列表...