Sql server 使用行\号更新ID列
我希望用MAXID+1更新一些当前为空的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列不自动递增,而是从另
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
如果您可以显示一些示例数据和所需的输出,那么将更容易指导您。看着一个错误的查询,很难说出你到底想做什么。