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')