日期:2014-05-17  浏览次数:20495 次

sqlserver如何在不切换数据库的情况下拿到临时表的字段名称
现在要做这样一个报表,通过部门,时间的选择(时间是各个月之间),得到各部门下每月各咨询顾问没有及时跟进各自机会的数量统计,类似图



其中每列代表每个月的号数,1号,2号。。。等等,统计出每个咨询顾问这个月每天没有跟进的机会
注:列数是固定的32行,不是根据月份的天数来动态的(否则填充不了公司平台的网格),所以这里考虑行转列也是不怎么可行的。

我的考虑方法:
1.建立一个临时表
create table #bb(
[0] int,
[1] varchar(200),
[2] varchar(200),
[3] varchar(200),
[4] varchar(200),
[5] varchar(200),[6] varchar(200),[7] varchar(200),[8] varchar(200),[9] varchar(200),[10] varchar(200),[11] varchar(200),[12] varchar(200),[13] varchar(200),[14] varchar(200),[15] varchar(200),[16] varchar(200),[17] varchar(200),[18] varchar(200),[19] varchar(200),[20] varchar(200),[21] varchar(200),[22] varchar(200),[23] varchar(200),[24] varchar(200),[25] varchar(200),[26] varchar(200),[27] varchar(200),[28] varchar(200),[29] varchar(200),[30] varchar(200),[31] varchar(200))
用来表示每个月的号数,
2.根据筛选条件,得到符合条件的数据的数量,与对应的日期
3.根据日期得到具体的几号,然后遍历临时表的字段,如何跟某个字段名称一样,就把数量插入到对应的列

问题:拿临时表的字段时,由于临时表存在另外一个数据库,所以必须用use 数据库名才能做查询
,但是切换回来后具体的结果集就无法使用了
Use tempdb
go

declare mycursor1 cursor global for select NAME FROM tempdb.dbo.syscolumns WHERE id=object_id('tempdb.#bb')
Use GZLCRM
go
open mycursor1
  While @@FETCH_STATUS=0
  begin
  FETCH NEXT FROM mycursor1 --遍历每条数据
  end
DEALLOCATE mycursor1

怎么解决呢??急。。。
数据库 SQL?Server

------解决方案--------------------
--#1.其实正因为你的字段是固定的(32个),行转列变为一种可能,而不是不可能。
--#2.直接在你当前的数据库操作即可,不用切换到tempdb库,参考如下:
Use GZLCRM --你的当前数据库
go

declare mycursor1 cursor global for 
select NAME 
FROM tempdb.sys.syscolumns 
WHERE id=object_id('tempdb..#bb') --注意是两个点啊

open mycursor1
While @@FETCH_STATUS=0
begin
FETCH NEXT FROM mycursor1 --遍历每条数据
END
CLOSE mycursor1 --记得关闭游标
DEALLOCATE mycursor1