如果我有一个表变量,那么如何循环这个var来进行一些处理:
DECLARE @userData TABLE(
userId int NOT NULL,
dayDate datetime NOT NULL,
transIn datetime NULL,
transOut datetime NULL,
attIn datetime NULL,
attOut datetime NULL,
MissionIn datetime NOT NULL,
MissionOut datetime NOT NULL,
empState varchar(10) NULL
);
INSERT INTO @userData
SELECT userid, trans_date,transtime_in,transtime_out,att_start_time,att_end_time,@Mission_fromdatetime,@Mission_todatetime,day_flag
FROM datatable_o a
WHERE a.userid = @userid AND a.trans_date = @date ORDER BY transtime_in ;
根据整个案例的评论:
如果作品从:att_start_time
开始,到att_end_time
结束(工作期间)
每位员工都可以在同一天检查和退房多次,以便我们跟随他。
存入transtime_in
的办理登机手续
和签出存储在transtime_out
我有day_flag
所以我知道这一天是' W'工作日或' E'周末
现在考虑除emp_num ,date
我想为员工External mission over time
计算:
我有四个案例:
示例:
emp_num date att_start att_end mission-in mission-out
672 2015-3-4 07:05:00 13:30:00 12:12:00 20:00:00
emp_num date trans_in trans_out
672 2015-3-4 06:54:00 11:10:00
672 2015-3-4 12:00:00 14:05:00
答案 0 :(得分:1)
您可以从该表的副本中获取帮助来遍历您的表格:
关于你的问题假设你的表是:
DECLARE @userData TABLE(
userId int NOT NULL,
/*Other fields*/
);
并且您的表格数据是:
INSERT INTO @userData
/*A SELECT or values*/
现在创建一个表格副本:
DECLARE @userData_2 TABLE(
userId int NOT NULL,
/*Structure should be the same as @userData*/
);
INSERT INTO @userData_2
SELECT * FROM @userData
现在你可以做循环并做任何你想做的事情:
DECLARE @userId INT
WHILE EXISTS (SELECT * FROM @userData_2)
BEGIN
SET @userId=(SELECT TOP 1 userId FROM @userData)
/*
DO YOUR TRANSACTION HERE
*/
DELETE FROM @userData_2 WHERE userId=@userID
END
注意:这假设userId是唯一的,如果没有,那么您需要具有唯一字段,或使用复合字段而不是userId。