2014-09-28 3 views
1

Я ищу, чтобы обновить некоторые ID поля, которые в настоящее время NULL с MAX(ID)+1 однако у меня возникли некоторые вопросы, тянущие правильный синтаксис вместе, я пытался использовать что-то вроде:Обновить столбец ID с помощью ROW_NUMBER

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 уже пришли из-за некоторые проблемы с файлом, который импортируется и файлом нуждающегося в непосредственно импортироваться во вторую таблицу.

Любая помощь будет с благодарностью получил

+1

Если вы можете показать некоторые данные образца и желаемый результат, вам будет легче вести вас. Глядя на неправильный запрос, действительно сложно сказать, что именно вы пытаетесь сделать здесь. –

ответ

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; 
0

Если у вас есть creatTime в вашей таблице, вы можете легко использовать это;

Вы можете установить стартовый номер и выбрать определенную часть таблицы.

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 
Смежные вопросы