SQL Server 2005 reporting services 是否不支持存储过程的临时表?求教报表开发高人
说一下我的报表业务需求
我经常把大量的数据从多个表中提取出来 汇总到一个临时表里 然后最后把这个临时表的数据一起再group by返回结果
例如 我有一个零售店的数据 每天都有很多各种商品的销售数量 每日的数据存储在每日的表中 当我查询一个月的销售时候 我需要吧每天的数据先提取到一个临时表里 最后汇总给出返回结果
以往都是报表使用存储过程实现的业务 最后把返回数据提供给jsp网页等 如今想一起用sqlserver2005的报表解决
过去的存储过程大致如此
create procedure xx
@begintime datetime, --查询开始时间
@endtime datetime --查询结束时间
as
declare ...
begin
create table #mytotal -- 创建一个用于汇总数据的临时表
(
mydate datetime, -- 日期
myitem varchar(10),-- 商品名
itemcnt int -- 商品销售数量
)
...这里有个循环查找输入参数的时间范围内所有表
insert into #mytotal
select
mydate,myitem,itemcnt...from mytblxxx
...以上从每天的表里提出一些数据插入临时表 mytblxxx 可以是 mytbl20080919 mytbl20080920 等每天一张的表
select mydate,myitem,sum(itemcnt) from #mytotal group by mydate,myitem
...最后再把汇总的数据给分组返回结果
end
不复杂的存储过程
但是就这么一个存储过程我在使用sqlserver2005的报表进行创建报表的时候却没什么办法
在报表设计 设计查询窗口 查询字符串里 我仅仅输入了
exec xx @begintime,@endtime
提示我 sql_variant 不能隐形转换为 datetime 就不说了 我还可以修改存储过程的输入参数类型对付
但是 我发现 这个报表结果集自动生成 似乎是依赖于检查存储过程的返回结果来源于哪个表的
糟糕的是 我这个来源是个临时表 而且是个只有存储过程被执行才可以生成的临时表 reporting services 是无法从目前不存在的临时表里获得报表返回结果集项的。
我如果把 #mytotal 换成了 普通表自然可以解决这个问题 但是我的业务需要 同时给多个用户使用 改成普通表导致的后果是这个表同个时间被多人修改 那后果就是出错。
我想问的 是否sqlserver2005 的reporting services 就是不支持我这么使用存储过程的? 不允许最终返回结果从一个临时表出来?
但是我想我这个需求应该是个很常见的需求吧 绝大多数做报表的人应该都是使用 网页和存储过程交互的吧?
请教 我目前的这个存储过程的使用方法 如何在报表中实现?如果我要使用临时表的话 ?
当然 如果能达到同时给多人使不冲突的效果 有其他的解决方法也是可以的 多谢多谢~