使用ROW_NUMBER更新ID列

时间:2014-09-28 16:34:43

标签: sql-server sql-server-2008

我希望使用ID更新当前NULL的一些MAX(ID)+1字段,但是我在将一些正确的语法拉到一起时遇到了一些问题,我试图使用类似的内容:

UPDATE table
SET ID = (SELECT MAX(SELECT (ROW_NUMBER() OVER (order by ID) as rownumber 
                     from table))+1  from table)
where ID is NULL

然而,这显然不起作用,任何人都可以建议应该在这做什么?

ID列不会自动递增,并从另一个自动递增其ID列的表中获取其值,NULL进入的原因是由于某些问题正在导入的文件和需要直接导入第二个表的文件。

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望将NULL id值设置为从id加上1的最大值开始递增值。试试这个:

with toupdate as (
      select t.*,
             (select max(id) from table t) as maxid,
             row_number() over (partition by id order by id) as seqnum
      from table t
     )
update toupdate
    set id = maxid + seqnum
    where id is null;

答案 1 :(得分:0)

如果你的表中有creationTime,你可以轻松使用它;

您可以设置起始编号,然后选择表格的某个部分。

 DECLARE @startNumber INT = 1 -- Your start
    DECLARE @endNumber INT = (SELECT Count(Id) FROM YourTableName)

    WHILE (@startNumber <= @endNumber)
    BEGIN
    UPDATE YourTableName
    SET Id = @startNumber 
    WHERE CreationTime = 
(
SELECT 
CreationTime 
FROM 
( 
SELECT Row_Number() OVER (ORDER BY CreationTime ASC) AS RowNum, CreationTime FROM YourTableName
) t2 WHERE RowNum = @startNumber 
)

    SET @startNumber  = @startNumber  + 1
    END