SQLserver 中如何操作存储过程的结果集
--有一个存储过程 SalaryTable 叫工资表,这个表是同事提供的,里面的列是动态查询并计算出来的,我不能修改只能调用。
create proc SalaryTable
,@iMonth NVARCHAR(20) --月份
,@iYear NVARCHAR(20) --年份
,@cClassCode NVARCHAR(50)--类型编码
,@cClassName NVARCHAR(255)--类型名称
as
SET NOCOUNT ON
BEGIN
--这里是具体的业务逻辑,其中的具体逻辑如何计算不需要关心,只需要使用这个存储过程的结果集就行了。
END
go
--执行该存储过程(根据输入的月份不同可以查询不同月份的工资明细)
--查询2016年5月份的工资明细 执行结果
exec SalaryTable '5','2016','001','工资'
年 月 员工编码 员工名称 基本工资 奖金 提成 出差费 加班费 公积金 社会保险 业务报销 交通补贴 住房补贴 饭贴
2016 5 ST001 张三 4000 1000 1000 500 200 200 100 1500 200 500 300
2016 5 ST002 李四 5000 1000 1000 500 200 200 100 1500 200 500 300
2016 5 ST003 王五 6000 1000 1000 500 200 200 100 1500 200 500 300
--查询2016年6月份的工资明细 执行结果
exec SalaryTable '6','2016','001','工资'
年 月 员工编码 员工名称 基本工资 奖金 提成 出差费 加班费 公积金 社会保险 业务报销 交通补贴 住房补贴 饭贴
2016 6 ST001 张三 4000 1000 1000 200 100 200 100 100 200 500 300
2016 6 ST002 李四 5000 1000 1000 300 100 200 100 100 200 500 300
2016 6 ST003 王五 6000 1000 1000 400 100 200 100 100 200 500 300
--下面需求来了
--1,该功能为财务总监看的一个报表功能。
--2,当财务总监输入年份时统计某个员工一年的工资明细。
--最终实现结果
年 月 员工人数 员工编码 员工名称 基本工资(基本工资+奖金+提成+补贴) 出差费 公积金 社会保险 业务报销
2016 4 0
2016 5 3 ST001 张三 7000 500 200 100 1500
2016 5 3 ST002 李四 8000 500 200 100 1500
2016 5 3 ST003 王五 9000 500 300 100 1500
2016 6 3 ST001 张三 7200 200 200 100 100
2016 6 3 ST002 李四 8200 300 200 100 100
2016 6 3 ST003 王五 9200 400 200 100 100
2016 7 0
2016 8 0
2016 9 0
2016 10 0
2016 11 0
2016 12 0
2017 1 0
2017 2 0
2017 3 0
--这样解释不知道能否容易理解,还请大神指点。
--这个功能并没有那么复杂,主要有两个功能点无法攻克,还请大神指点。
--1.当财务总监输入年份时循环调用SalaryTable存储过程(为什么循环呢,比如:输入2016,在SalaryTable存储过程中查询2016年4月至12月与2017年1月至3月数据)不知道为什么客户过年是这样的。所以需要根据年份判断不同年份与月份
--2.将每次调用存储过程的结果集插入到临时表,之后操作临时表。(为什么要插入临时表呢,因为我不知道如何合并存储过程执行的结果集)
--还望大神门多多指点,是否能有更好的解决方案,非常感谢。