我希望使用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
进入的原因是由于某些问题正在导入的文件和需要直接导入第二个表的文件。
感谢任何帮助
答案 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