Sql server 2008 SQL更新查询中的多行
我已经写了两个查询,我需要考虑将它们组合成一个游标。第一个查询如下所示-Sql server 2008 SQL更新查询中的多行,sql-server-2008,sql-update,Sql Server 2008,Sql Update,我已经写了两个查询,我需要考虑将它们组合成一个游标。第一个查询如下所示- DECLARE @Date DATETIME SET @Date = '12-July-2014' SELECT Date AS SaturdayDate , DayOfWeek FROM ( SELECT DATE , DATENAME(DW,DATE) as DayOfWeek , ROW_NUMBER() OVER (ORDER BY Date) A
DECLARE @Date DATETIME
SET @Date = '12-July-2014'
SELECT Date AS SaturdayDate
, DayOfWeek
FROM (
SELECT DATE
, DATENAME(DW,DATE) as DayOfWeek
, ROW_NUMBER() OVER (ORDER BY Date) AS rownum
FROM tblCalender
WHERE DATENAME(DW,DATE) = 'Saturday'
AND Date > @Date
) AS t
WHERE t.rownum % 4 = 0
AND DATEPART(YEAR, Date) = DATEPART(Year, GETDATE())
在7月12日之后的剩余时间内,每4个星期六返回-
SaturdayDate |DayOfWeek
2014-08-09 00:00:00.000 |Saturday
2014-09-06 00:00:00.000 |Saturday
2014-10-04 00:00:00.000 |Saturday
2014-11-01 00:00:00.000 |Saturday
2014-11-29 00:00:00.000 |Saturday
2014-12-27 00:00:00.000 |Saturday
这非常适合我的需要,然后我需要使用上面的结果作为@SaturdayDate
参数运行更新查询(需要它循环并更新每个记录)
因此,更新查询将循环通过第一个查询的结果,用新的开始时间更新每个日期,不确定如何处理这个问题,我发现的所有答案都没有帮助。希望这足够清楚。谢谢
*附加说明-更新需要查看前一周到每个星期六出现的天数,并更改开始时间
正在使用的表格示例。
基于此,如果周六在列表中,更新将更改18日和19日的开始时间。看起来您需要类似的内容(注意:下面的脚本尚未测试) 根据公布的样本数据进行修改:
DECLARE @Date DATETIME
SET @Date = '12-July-2014'
UPDATE STAFFROTA
SET StartTime = '11:00:00'
FROM dbo.tblStaffRota STAFFROTA
INNER JOIN
(
SELECT DATEADD(d, -6, Date) AS SaturdayDateStart, Date AS SaturdayDateEnd
, DayOfWeek
FROM (
SELECT DATE
, DATENAME(DW,DATE) as DayOfWeek
, ROW_NUMBER() OVER (ORDER BY Date) AS rownum
FROM tblCalender
WHERE DATENAME(DW,DATE) = 'Saturday'
AND Date > @Date
) AS t
WHERE t.rownum % 4 = 0
AND DATEPART(YEAR, Date) = DATEPART(Year, GETDATE())
) SAT
ON STARFFROTA.[Date] BETWEEN SAT.SaturdayDateStart AND SAT.SaturdayDateEnd
WHERE (STARFFROTA.EmployeeID IN ('JJJ','HSW', 'GPH', 'DVD'))
AND (STARFFROTA.StartTime = '10:30:00')
不是安静地告诉我我需要在哪里,更新查询需要更新员工10:30开始的工作日。因此,如果他们在那个星期六工作,那么就需要更改开始时间。您能否发布两个表的一些示例数据
tblStaffRota
和tblcalander
@Gavlaaa。。根据示例数据修改代码。我相信这就是你所需要的。
DECLARE @Date DATETIME
SET @Date = '12-July-2014'
UPDATE STAFFROTA
SET StartTime = '11:00:00'
FROM dbo.tblStaffRota STAFFROTA
INNER JOIN
(
SELECT DATEADD(d, -6, Date) AS SaturdayDateStart, Date AS SaturdayDateEnd
, DayOfWeek
FROM (
SELECT DATE
, DATENAME(DW,DATE) as DayOfWeek
, ROW_NUMBER() OVER (ORDER BY Date) AS rownum
FROM tblCalender
WHERE DATENAME(DW,DATE) = 'Saturday'
AND Date > @Date
) AS t
WHERE t.rownum % 4 = 0
AND DATEPART(YEAR, Date) = DATEPART(Year, GETDATE())
) SAT
ON STARFFROTA.[Date] BETWEEN SAT.SaturdayDateStart AND SAT.SaturdayDateEnd
WHERE (STARFFROTA.EmployeeID IN ('JJJ','HSW', 'GPH', 'DVD'))
AND (STARFFROTA.StartTime = '10:30:00')