2015-06-18 4 views
0

Мне нужно увеличивать каждое поле в столбце на 1, начиная с 2866. Я построил следующий запрос, но все, что он делает, устанавливает каждое поле в 2867 в противоположность до 2868, 2869 и т. д.Увеличение каждого поля в столбце на 1 - SQL Server 2008

DECLARE @a int 
SET @a = 2866 
UPDATE view_kantech_matched SET image_id = @a + 1 
WHERE image_id = null 

Любые предложения? Благодаря

+1

Есть некоторые колонки, которые в настоящее время указует на порядок этих строк, так что мы можем легко определить * *, который строка должен иметь идентификатор 2866 назначен? –

+0

Для этого вы должны использовать ROW_NUMBER. –

+0

Когда вы говорите «каждое поле в столбце», вы имеете в виду «каждое значение в столбце?» –

ответ

4

Общая структура для этого будет:

;WITH Numbered as (
    SELECT *,ROW_NUMBER() OVER (ORDER BY <some column>) rn 
    FROM view_kantech_matched 
    WHERE image_id is NULL 
) 
UPDATE Numbered SET image_id = 2865 + rn 

Но я не знаю, что <some column> будет.

+0

Thats great, спасибо за это. Я даже не слышал об операторе WITH. – SamFarr

+0

@SamFarr - это выражение [Общее выражение таблицы] (https://technet.microsoft.com/en-us/library/ms190766 (v = sql.105) .aspx) –

+0

Спасибо за это! – SamFarr

2

Если вы хотите обновить его до значения, которое начинается с 2866 и уровней с каждой строкой, вы должны указать столбцы (столбцы), которые будут использоваться для заказа.

Затем вы можете использовать ROW_NUMBER:

WITH NoImageIDS AS 
(
    SELECT vkm.*, RN = ROW_NUMBER() OVER (ORDER BY AnyColumn ASC) 
    FROM dbo.view_kantech_matched vkm 
    WHERE image_id IS NULL 
) 
UPDATE NoImageIDS SET image_id = RN + 2866 
+0

Спасибо за ответ – SamFarr

Смежные вопросы