2013-05-28 6 views
0

У меня есть таблица, которая находится в форматеПриращение поля CHAR

Muser char(27), null 
privilege char(15), null 
Flags (smallint, null) 

MUSER Privilege Flags 
1  ALL  0 
1  ASSIGNEE 0 
1  ALL  0 
etc 

Я хочу, чтобы увеличить столбец символа Muser значением 1 В настоящее время каждая запись в Muser имеет значение 1

После приращения обновления Muser следует читать

1 
2 
3 
etc 

Как бы я сделать это, как я не могу получить мою голову вокруг него - оценит TSQL, если это возможно.

+3

Каков план после того, как вы установили все значения в таблице? Планируете ли вы изменить его на INT NOT NULL IDENTITY? Если нет, как вы собираетесь обрабатывать новые строки в будущем? Оставить их в 1? – Bridge

ответ

0

Вот один из способов, с помощью КТР и row_number() функция:

with toupdate (
     select t.*, 
      row_number() over (order by (select NULL)) as seqnum 
     from t 
    ) 
update toupdate 
    set Muser = cast(seqnum as varchar(255)); 

Вы не определяете порядок. order by (select NULL) выбирает произвольный порядок.

И почему вы храните целые числа в поле символов? Что-то кажется неправильным с вашей структурой данных.

+0

Если число 999,999,999,999,999,999,999,999,998, я вижу проблемы :) –

+0

Ах долгая история - кто-то здесь вмешивается, пытаясь дезинформировать столбец для экспорта за пределы страны - обновил таблицу там, где находится valuse, - но оффшорная компания нуждается в инкрементальном поле ... – MoOriginal

+0

Недопустимое имя объекта 't' ?? с cte_toupdate AS (выберите t. *, row_number() over (упорядочить по (выберите NULL)) как seqnum от t) update cte_toupdate set Muser = cast (seqnum as varchar (255)); – MoOriginal

0

Вы можете попробовать этот способ, а также:

Fiddle example here

declare @id char(27) 
update mytable set @id = muser = convert(int,isnull(@id,'0')) + 1 


--Results 
| MUSER      | PRIVILEGE  | FLAGS | 
--------------------------------------------------------- 
| 1       | ALL    |  0 | 
| 2       | ASSIGNEE  |  0 | 
| 3       | ALL    |  0 | 
+0

Этот простой скрипт отлично работал для простых нужд. – MoOriginal

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