如何在存储过程B中,对存储过程A的结果集进行查询
来源:互联网 发布:华为算法工程师笔试 编辑:程序博客网 时间:2024/04/28 07:15
问题:
有读者来信询问:如何在存储过程B里面使用存储过程A执行后的结果集?就是在存储过程B里面再对存储过程A的结果集进行查询。
解答:
建议您在存储过程中将另外一个存储过程的结果集先存放到一个暂存数据表,接着对此暂存数据表进行查询处理之后,然后再将最终的处理结果传出。
在此我们将示范如何在存储过程中使用名称以 # 开头的区域性暂存数据表以及table数据类型的变量来储存另外一个存储过程的结果集,并进行后续的处理。
程序范例一
以下的程序代码会先建立一个查询所有薪资与性别的存储过程(uspGetIncome),接着建立一个以「性别」为查询条件的存储过程(uspGetTotalIncomeByGender)。在存储过程uspGetTotalIncomeByGender中,我们会建立一个名称为#tmpTable 的暂存数据表,然后使用INSERT INTO ... EXECUTE <存储过程> 表达式将另外一个存储过程uspGetIncome 的结果集新增至暂存数据表中,接着以「性别」为分类条件,使用 SUM 函式来计算出不同性别的收入总计。最后,我们分别以男性与女性为输入参数呼叫存储过程 uspGetTotalIncomeByGender(执行结果如图表1所示):
...
-- 查询目前薪资之SP
CREATE PROCEDURE dbo.uspGetIncome
AS
SELECT 目前薪资, 性别 FROM 章立民研究室;
GO
-- 建立以「性别」为查询条件的 SP
-- 这个 SP 会呼叫上面的 SP
CREATE PROCEDURE dbo.uspGetTotalIncomeByGender
@Gender nvarchar(1)
AS
-- 建立一个暂存数据表
CREATE TABLE #tmpTable (目前薪资 money, 性别 nvarchar(1));
INSERT INTO #tmpTable EXECUTE dbo.uspGetIncome;
-- 取得以性别为分类条件的收入总计
SELECT SUM(目前薪资) AS 收入总计 FROM #tmpTable WHERE 性别 = @Gender;
GO
-- 查询性别为「男」的员工收入总计
EXECUTE dbo.uspGetTotalIncomeByGender '男';
GO
-- 查询性别为「女」的员工收入总计
-- 省略 EXECUTE 关键词
-- 并指定 @Gender 这个参数名称来执行SP
-- 请注意,此时 SP 必须是表达式的第一道指令
dbo.uspGetTotalIncomeByGender @Gender = '女';
GO有些程序员喜欢使用存储过程来实现一些数据的查询工作,如果客户端用户(这里是指使用这些存储过程的程序员)想对得到的结果进行筛选,目前没有简单的办法,但是可以利用临时表作为折中的办法。
Create Table #TmpTable(FieldList)
Insert Into #TmpTable Exec StoreProcedureName ParameterList
需要指出创建临时表语句中的字段列表FeildList需要和存储过程返回的字段顺序一致;ParameterList是存储过程要用到的参数。执行完之后,
就可以使用Select语句对刚创建的临时表进行条件查询了。最后不要忘记删除掉临时表。
- 如何在存储过程B中,对存储过程A的结果集进行查询
- 如何对存储过程返回的结果进行条件查询
- 如何对存储过程返回的结果进行条件查询
- 在一个存储过程A中调用另外一个存储过程B返回的结果集
- 在存储过程A中调用存储过程B的结果
- 对存储过程返回的结果进行条件查询
- 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(
- 在存储过程中如何使用另一个存储过程返回的结果集
- 在存储过程中如何使用另一个存储过程返回的结果集SQL实例
- 在存储过程中如何使用另一个存储过程返回的结果集
- 在存储过程中如何使用另一个存储过程返回的结果集
- 如何在存储过程内部获得查询的结果
- Oracle在存储过程中如何返回结果集
- 存储过程中调用另一个存储过程的结果集
- 存储过程中调用另一个存储过程的结果集
- 对统计的结果进行分页的存储过程
- 在SQL中直接使用存储过程查询返回的结果集
- 在SQL 语句中使用存储过程的结果集
- oracle循环语句小结
- 钩子 添加额外菜单(dll)
- Java Socket 简单的Client/Server程序
- SAP系统常用变量
- AJAX 实例
- 如何在存储过程B中,对存储过程A的结果集进行查询
- 10.7中如何把硬盘快捷方式加入到finder的左边。
- VB程序在有的电脑上字体显示不全的原因
- Ubuntu 11.10安装后必做的11项设置
- module_param&&MODULE_PARM_DESC
- sql自动批量产生数据小工具的主页面源码
- MFC程序逆向
- Facade外观模式
- Linux操作系统基础知识之六:系统调用