Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 使用行\号更新ID列_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 使用行\号更新ID列

Sql server 使用行\号更新ID列,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我希望用MAXID+1更新一些当前为空的ID字段,但是我在使用正确的语法时遇到了一些问题,我尝试使用以下方法: 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列不自动递增,而是从另

我希望用MAXID+1更新一些当前为空的ID字段,但是我在使用正确的语法时遇到了一些问题,我尝试使用以下方法:

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出现的原因是由于正在导入的文件存在一些问题,并且需要将文件直接导入第二个表中


如果我理解正确,您希望将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;

如果您的表中有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

如果您可以显示一些示例数据和所需的输出,那么将更容易指导您。看着一个错误的查询,很难说出你到底想做什么。