怎么在存储过程中共享数据?(一)
2006年4月13日 by workingbird
这篇文章解决两个相关的问题:
1、怎么在一个存储过程中使用另外一个存储过程中返回的结果集,相似的,怎么在一个存储过程中对另一个存储过程的结果集使用SELECT语句?
2、怎么将数据表以参数的形式从一个存储过程传递到另一个存储过程?在这篇文章中,我们将讨论一些方法,并且比较它们的优缺点。尽管这些方法都可以解决这些问题,但某些方法最好在当你需要反复使用结果集的时候才使用。在你需要反复使用一个结果集的时候,大部分方法都要求你用这样或那样的方式重写一个存储过程,但也有不需要重写的方法。
下表是这些方法的概述:
| 方法 | input/output | Sql Server 版本 | 备注 |
| 使用output参数 | output | 全部 | 不是任何情况都适用,(but sometimes overlooked) |
Table类型的函数 内置函数 多重声明的函数 | output | SQL 2000 | 可能是做好的输出方式,但有些限制。 重复使用单个Select时使用 需要嵌入多个逻辑时使用 |
使用数据表 共享一个临时表 Process-keyed Table | input/output | 全部 | 大部分情况下没有限制,除非要执行某些复杂的逻辑。 主要用于在一对一的调用 在多个处理中调用一个对象被多个对象调用 |
| 使用Insert exec方式 | output | Sql 6.5 | 不需要重写。(Has some gotchas.) |
| OpenQuery | output | Sql 7 | 不需要重写。投机取巧是有缺陷的。 (Tricky with many pitfalls。) |
| 使用XML | input/output | Sql 2005 | 更有用还是更形式?( More cute than useful? ) |
| 使用游标变量 | output | Sql 7 | 不推荐。 |