2016-12-19 2 views
-1

Я работаю над SQL Server 2008 и пытаюсь обновить таблицу. Мне просто нужно, чтобы первые сотни строк обновлялись с помощью 15-значной последовательности. Я попытался следующие:SQL: обновление нескольких строк (Top 100) с последовательными данными

Declare @id varchar 
Set @id = 2435435345962 

UPDATE TOP (100) Table1 
SET @id = Column_nm = @id + 1 
GO 

, но я получаю следующее сообщение об ошибке:

Msg 426, Level 16, State 1, Line 3
Длина 1 принимающей переменной меньше чем длина 15 столбца «Column_nm».

+1

Почему вы объявляете переменную как 'VARCHAR' ...? – Siyual

+1

Вы также не указали 'ORDER BY' в своем запросе. 'TOP 100' вернет произвольные строки, если вы явно не укажете, что делать. – Siyual

ответ

1

Несколько вещей. Вы хотите начать с 0, так что вы можете добавить 00-99.

Так давайте начнем с базой

WITH cte as ( 
     SELECT TOP 100 *, 
       ROW_NUMBER() OVER (ORDER BY somefield) -1 as rn -- row_number start with 1. 
     FROM Table1 
     ORDER BY somefield 
) 
UPDATE cte 
SET anotherfield = '1234567890ABC' + REPLACE(STR(rn, 2, 0), ' ', '0') 
        ^^ 13 chars  ^^ two digits number 
1

сообщение об ошибке о длине переменной. В SQL Server длина по умолчанию varchar равна 1 (с msdn.microsoft.com у меня есть только французская ссылка извините).

Declare @id varchar(15) 
Set @id = 2435435345962 
UPDATE top (100) Table1 
SET @id = Column_nm = @id + 1 
GO 

Вы должны объявить id длиной 15, чтобы поместить свою строку в эту переменную.

+0

id имеет 13 цифр, OP хочет добавить 00-99 в качестве последних цифр, чтобы сделать это 15 –

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