Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用行号更新列_Sql_Sql Server - Fatal编程技术网

Sql 用行号更新列

Sql 用行号更新列,sql,sql-server,Sql,Sql Server,我在SQL Server存储过程中有一个带有Id和日期列的临时表。表中已经填充了日期,我希望能够根据日期升序在id列中添加序号 我试过以下方法 UPDATE #Weeks SET Id = ( SELECT ROW_NUMBER() OVER (ORDER BY WeekDate ASC) AS Id FROM #Weeks AS DATA); 然后得到这个错误 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 感谢您的帮助 这对我

我在SQL Server存储过程中有一个带有Id和日期列的临时表。表中已经填充了日期,我希望能够根据日期升序在id列中添加序号

我试过以下方法

UPDATE #Weeks 
SET Id = (
          SELECT ROW_NUMBER() OVER (ORDER BY WeekDate ASC) AS Id 
          FROM #Weeks AS DATA);
然后得到这个错误

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时

感谢您的帮助

这对我有用

更新周 SET Id=tab.Id 从w周开始 内连接 选择工作日, 按工作日ASC作为Id的订单上的行号 从w.WeekDate=Tab.WeekDate上的Weeks选项卡尝试以下操作:

UPDATE #Weeks 
SET Id = Tab.Id
FROM #Week w
     INNER JOIN (
                 SELECT Id, 
                        ROW_NUMBER() OVER (ORDER BY WeekDate ASC) AS Id 
                 FROM #Weeks ) Tab ON w.Id = Tab.Id 
因为子查询返回多行,并且只返回一行的and=运算符。

试试这个

;with cte as
(
SELECT Id,ROW_NUMBER() OVER (ORDER BY WeekDate ASC) AS DATA FROM #Weeks 
)

UPDATE #Weeks SET Id=DATA from cte

是否用行号更新列?这不是个好主意@mehdi什么是好主意?更新Weeks SET Id=tab.Id FROM Weeks w Internal JOIN SELECT WeekDate,w.WeekDate=Tab.WeekDate我编辑了原始问题并发布了对我有用的答案……hawk为我指明了正确的方向,谢谢again@realnumber3012不是抄袭过去,只是缺少一个角色。请再试一次!!我认为这是一个好的方向。但是,我会这样写:;当CTE作为SELECT WeekDate时,按WeekDate ASC作为周更新[UPDATEWeeks]中的新Id设置[UPDATEWeeks].[Id]=CTE。[NEWIID]作为周更新WEKS]中的[UPDATEWeeks]在CTE上内部加入CTE。[WeekDate]=[UPDATEWeeks].[WeekDate];
  UPDATE #Weeks 
    SET Id = t.Id1
    FROM #Week w
    INNER JOIN
    (
      SELECT Id, ROW_NUMBER() OVER (ORDER BY WeekDate ASC) AS Id1 
      FROM #Weeks ) T ON w.Id = t.Id