找回密码
 注册成为天翎用户
查看: 629|回复: 3

[已解决] 复杂的存储过程,最后执行了结果返回了结果,系统显示的数据为空--可能是系统设计缺陷

[复制链接]
深圳捷维 发表于 2015-9-15 11:29:08 | 显示全部楼层 |阅读模式
本帖最后由 lana 于 2015-9-29 11:54 编辑

----一下是存储过程的全部代码-----
------一下存储过程 主要是 获取上个月的 数据
-------同时 根据当前用户所在的默认部门 以及所有的子部门的所有数据、
-----如果天翎,不支持这种存储过程,那这个需求如何设计
create   proc [dbo].[zhuanzhengshenqiShangyueDept]
(
   @start varchar(100), ---预留两个参数,后期会用到
   @end varchar(100),
   @deptlist varchar(4000) ----当前用户登录所在的默认部门 id【由视图上的存储过程传入】
)
as
--------下面是获取上个月的时间段 比如得到的是 2015-04-01  至 2015-06-30
declare @sql varchar(1000),@startT datetime,@endT datetime
declare @t1 nvarchar(1000),@t2 nvarchar(1000)
set @startT=DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0);
set @t1=convert(varchar(25),@startT,120);
set @endT= DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()), 0));
set @t2=convert(varchar(25),@endT,120);
-------------------------------------------开始---------得到当前用户默认部门的以及所有的子部门---------------------------------------------------------------
/* 这里调用标量函数 去取到所有符合条件的 部门id 并且返回---对这块用法不熟,需要学习*/
--- 1 将参数(当前用户所在的默认部门id,)
declare @idlist nvarchar(1000)
declare @id nvarchar(1000),@name nvarchar(1000),@alldeptid nvarchar(1000),@superior nvarchar(100)
declare @id1 nvarchar(1000)
declare @sqlnew nvarchar(1000),@onesql nvarchar(1000)
declare @idleve1 nvarchar(1000)
set  @idleve1=''
set @alldeptid=''
------------获取第二层次的组织架构,然后拼接赋值给 @idleve1【全局变量】
      set @deptlist=''''+@deptlist+''''
      set @onesql='select id,name from BingHai_obpm.dbo.T_DEPARTMENT where  superior='+@deptlist
      print('@onesql:'+@onesql)
      Create table #t (id nvarchar(100),name nvarchar(100))
      insert into #t(id,name)
      exec sp_executesql @onesql
     -- select id,name from BingHai_obpm.dbo.T_DEPARTMENT where  superior=@deptlist
      --select id,name from #t
      select @idleve1=@idleve1+','''+id+'''' from #t
      drop table #t
------------这里需要循环 每一个第二层的组织架构,看它是否有第三层的组织架构,
------------如果有,查询所有的第三层组织架构拼接给全局变量 @idlist
declare tbl_cursor cursor for select id,name,superior from BingHai_obpm.dbo.T_DEPARTMENT where  superior=@deptlist
set @idlist= ''''+@deptlist+''''
---获取当前数据库中的表  
open tbl_cursor --打开游标
fetch next from tbl_cursor  INTO @id,@name,@superior --游标开始循环读取,一条条读取,读取每一条的时候
while @@FETCH_STATUS = 0 ---只要读到数据,就循环执行下面的操作
begin
     set @id1=''''+@id+''''  ---需要给值左右加上单引号
-------开始
     set @sqlnew='select id,name from BingHai_obpm.dbo.T_DEPARTMENT where superior='+@id1
      Create table #tempTable (id nvarchar(100),name nvarchar(100))
      insert into #tempTable(id,name)
      --select id,name from BingHai_obpm.dbo.T_DEPARTMENT where superior=@id1
       exec sp_executesql @sqlnew
      --select id,name from #tempTable
      select @idlist=@idlist+','''+id+'''' from #tempTable
      drop table #tempTable
-------结束  
    fetch next from tbl_cursor into @id,@name,@superior ----让表的游标继续读下一条数据
end
  set @alldeptid=@idlist+@idleve1
  --print('idlist3:'+@idlist)
  --print('idleve12:'+@idleve1)
  --print('alldeptid:'+@alldeptid)
close tbl_cursor        ----------关闭游标
deallocate tbl_cursor   ----------释放游标资源
--------------------------------------------结束--------得到当前用户默认部门的以及所有的子部门-----------------
------------------拼接SQL--------------------------------------------------------------------------------------
set @sql=N'select a.DOMAINID,a.formid,a.applicationid,STATE,
b.name as ITEM_姓名, ITEM_申请人 ,c.name as ITEM_部门,ITEM_岗位,ITEM_入职日期,ITEM_转正日期
from dbo.TLK_转正申请表  a  
left join BingHai_obpm.dbo.T_USER b on  a.ITEM_申请人=b.id
left join  BingHai_obpm.dbo.T_DEPARTMENT c on c.id= a.ITEM_部门  
where 1=1  and ITEM_记录日期 >='''+@t1 +''''
+' and ITEM_记录日期 <= '''+@t2+''''
begin
--print(@sql)
exec(@sql)   ---这里执行了添加了业务逻辑以后的所有代码 能打印出来 能返回结果集 能显示数据
end

-----分析,其中用到了临时表 对临时表有插入查询动作
----天翎平台 页面没有任何数据,但是实际是有数据的
----估计是个bug或者缺陷,
----如何解决!!

补充内容 (2015-9-16 14:38):
在里面加入 SET NOCOUNT ON;可以解决这个问题吗?如何加?加在什么地方?以上是全部的存储过程脚本!
lana 发表于 2015-9-28 15:59:34 | 显示全部楼层
请截图,才能确认问题
回复

使用道具 举报

 楼主| 深圳捷维 发表于 2015-9-29 09:33:30 | 显示全部楼层
我自己搞定了!就是需要使用 SET NOCOUNT ON和 SET NOCOUNT off
回复

使用道具 举报

lana 发表于 2015-9-29 11:54:05 | 显示全部楼层
感谢楼主分享,通过优化存储过程,把存储过程获取到的结果集优化。http://www.cnblogs.com/zorp/archive/2008/08/29/1279218.html
回复

使用道具 举报

本版积分规则

手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-14 14:23

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表