【发布时间】:2016-05-28 02:51:24
【问题描述】:
我创建了以下脚本来更新 Microsoft SQL Server 中的计划表。主键字段是日期时间,是日历上的各个日期。员工计划连续工作 7 天,从每周一到周日到年底,我需要在 2 名员工之间轮换 7 天。我使用循环创建了以下脚本,并且正在寻找一种不使用循环来完成它的方法。谢谢!
DECLARE @z_start INT
DECLARE @z_date DATETIME
SET @z_date = '03/07/16'
WHILE(@z_date < '12/31/16')
BEGIN
SET @z_start = 0
WHILE(@z_start < 7) BEGIN
UPDATE EmployeeOnCall
SET employeeName = 'Jones, Jim'
WHERE deptID = 25 AND weekDay = @z_date
SET @z_date = DATEADD(dd, 1, @z_date)
SET @z_start = @z_start + 1
END
SET @z_start = 0
WHILE(@z_start < 7) BEGIN
UPDATE EmployeeOnCall
SET employeeName = 'Penton, Andy'
WHERE deptID = 25 AND weekDay = @z_date
SET @z_date = DATEADD(dd, 1, @z_date)
SET @z_start = @z_start + 1
END
END;
【问题讨论】:
-
您可以很容易地为此使用数字或计数。我还敦促您对日期字符串使用 ANSI 格式。 'YYYYMMDD' 如果日期格式或本地化与您的不同,您拥有日期字符串的方式将失败。这是到计数表的一个很好的链接。 sqlservercentral.com/articles/T-SQL/62867
-
您因寻找一种不使用循环来完成它的方法而获得了丰厚的+1! (我现在没有时间编写这个脚本,但我稍后会回来(但可能它已经回答了......)
-
我在这里有点困惑。您的第二个循环正在覆盖您在第一个循环中更新的数据。
-
你只需要为两个员工做这个吗?
-
我只需要 2 名员工这样做是的。因此,从 2016 年 3 月 7 日星期一到 2016 年 3 月 13 日星期日开始,我需要安排吉姆。从 2016 年 3 月 8 日星期一开始到 2016 年 3 月 14 日星期日安排安迪,在年底之前重复这种模式。
标签: sql sql-server loops datetime