SQL 存储过程如何做两个循环?

Kay9999 2018-04-19 05:02:42
现在有4个表,表1 是员工号,表2是日期设定(1-30日),表3是每日考勤时间和请假记录,表4是考勤分析后的数据
原来我在ACCESS上做,但太慢了想做成存储过程(第一次做),请问各位大神如何可以做两个循环?

原理是
打开表1,得到员工号
打开表2,得到日期(2018-4-1)
打开表3,查找表1工号,表2日期(2018-4-1)的记录
表1工号,表2日期(2018-4-1),表3考勤记录和结果,保存一条记录到表4中
表2移到下一个日期(2018-4-2)
打开表3,查找表1工号,表2日期(2018-4-1)的记录
表1工号,表2日期(2018-4-1),表3考勤记录和结果,保存一条记录到表4中
直到表2中的日所有日期记录做过(2018-4-1 到2018-4-30)
表1到移到下一个员工号
直到所有员工号做完

我不知道SQL 存储过程如何双循环,单一个循环我做过。
请各位指点一下。
...全文
1530 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2018-04-19
  • 打赏
  • 举报
回复

--如果员工在表3中没有某天的考勤记录,也需要生成缺勤记录保存到表4
insert into 表4
select 员工号,日期,B.考勤记录 
from
(select 员工号,日期 from 表1,表2) as A
left join 表3 as B ON A.员工号=B.员工号 and A.日期=B.日期

--如果员工在表3中没有某天的考勤记录,在表4中无需体现这天的缺勤记录
insert into 表4
select 员工号,日期,B.考勤记录 
from
(select 员工号,日期 from 表1,表2) as A
join 表3 as B ON A.员工号=B.员工号 and A.日期=B.日期
卖水果的net 2018-04-19
  • 打赏
  • 举报
回复

-- 例子

declare @tid int, @tname varchar(100), @cname varchar(100)
declare @cnt int
declare t_cursor cursor for select object_id, name from sys.tables
open t_cursor
fetch next from t_cursor into @tid, @tname
while @@FETCH_STATUS = 0 
begin
	declare c_cursor cursor for select name from sys.columns where object_id = @tid;
	open c_cursor;
	fetch next from c_cursor into @cname
	while @@FETCH_STATUS = 0 
	begin
		print @tname + '.' +  @cname
		fetch next from c_cursor into @cname
	end
	close c_cursor;
	deallocate c_cursor;
	fetch next from t_cursor into @tid, @tname
end
close t_cursor;
deallocate t_cursor;
go


22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧