本帖最后由 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;可以解决这个问题吗?如何加?加在什么地方?以上是全部的存储过程脚本! |