Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Добавить indentity в нужном порядке  [new]
алекс.ей
Guest
есть таблица с кучей записей. хочу добавить primarykey c indentity в порядке "по другому полю" - т.е. в таблице есть поле типа datetime и хотелось бы иметь id 1 2 3 4 5 в порядке возрастания даты.

кроме как написания хр.процедуры с WHILE TRUE

есть какие либо варианты для

alter table sales
ADD ID INT identity(1,1)
PRIMARY KEY (ID)


sql2000
26 май 09, 14:23    [7228747]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
1. Создание таблицы с нужной структорой и identity полем
2. SET IDENTITY ON
3. Вставка в эту таблицу
SELECT ROW_NUMBER() OVER (ORDER BY Field) , .... FROM
4. SET IDENTITY OFF
5. удаление оригинальной таблицы
6. переименование "новой"

7. Переписать весь код клиента....
26 май 09, 14:44    [7228926]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
Konst_One
Member

Откуда:
Сообщений: 11515
это не идентити
вам надо поле с условием
26 май 09, 14:45    [7228933]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
алекс.ей
есть таблица с кучей записей. хочу добавить primarykey c indentity в порядке "по другому полю" - т.е. в таблице есть поле типа datetime и хотелось бы иметь id 1 2 3 4 5 в порядке возрастания даты.

кроме как написания хр.процедуры с WHILE TRUE

есть какие либо варианты для

alter table sales
ADD ID INT identity(1,1)
PRIMARY KEY (ID)


sql2000
А если в эту таблицу вставить запись с датой, меньше максимальной из уже имеющихся?
Что будет с так называемым "primarykey"?
Даже подумать страшно!

Или Вы при каждой вставке PRIMARY KEY апдейтить собираетесь?
26 май 09, 14:52    [7228991]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ken@t
SELECT ROW_NUMBER() OVER (ORDER BY Field) , .... FROM
Как так ROW_NUMBER()? У топикстартера 2000 же!
26 май 09, 15:07    [7229151]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
алекс.ей
Guest
Ken@t
SELECT ROW_NUMBER()

sql2000
26 май 09, 15:34    [7229437]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
алекс.ей
Guest
tpg, прав
26 май 09, 15:35    [7229446]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Через 20 минут начало доклада по генераторам в SQL Server.
Еще есть время успеть в офис Microsoft... ;)
26 май 09, 15:38    [7229478]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
алекс.ей
Guest
iap, я наверное непонятно написал - пытаюсь объяснить еще раз

есть уже готовая таблица без индексов с данными.

данные в реале представляют из себя историю продаж, т.е. по идее должны следовать в хронологическом порядке. теперь я создаю кластерированный *или как это по-русски* primary key и опять же по моему разумению было бы правильней заполнить этот ключ данными в том порядке как они должны были бы быть если бы ключ с indentity существовал с самого начала.

т.е.

было

2008-05-04
2009-01-22
2006-01-01

надо

2006-01-01 1
2008-05-04 2
2009-01-22 3

Ken@t кстати правильно понял, только у него используется ф-я которая в sql2000 не существует.
26 май 09, 15:42    [7229506]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
алекс.ей
Guest
DeColo®es, мне только самолетом ;-)
26 май 09, 15:43    [7229519]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Я, конечно, планирую выложить доклад в том или ином виде в сеть, но чтобы понять, насколько неудобно пытаться управлять IDENTITY, нужно общение в реале. ;)
26 май 09, 15:48    [7229570]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
алекс.ей
Guest
"нет уж лучше вы к нам"
26 май 09, 15:51    [7229595]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> данные в реале представляют из себя историю продаж, т.е. по идее должны
> следовать в хронологическом порядке. теперь я создаю кластерированный
> *или как это по-русски* primary key и опять же по моему разумению было
> бы правильней заполнить этот ключ данными в том порядке как они должны
> были бы быть если бы ключ с indentity существовал с самого начала.

нет, ну, если очень хочется, то для запроса типа
insert into ... select ... order by ...
гарантируется, что identity будет присвоены с порядке order by.

в данном случае, правда, особо большого смысла в этом не вижу.
дальше-то кто будет гарантировать, что строки будут вставляться
строго в хронологическом порядке? что не вставит кто-нибудь
строку с датой меньшей, чем максимальная уже имеющаяся в таблице.

Posted via ActualForum NNTP Server 1.4

26 май 09, 15:53    [7229611]     Ответить | Цитировать Сообщить модератору
 Re: Добавить indentity в нужном порядке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31219
алекс.ей
Ken@t кстати правильно понял, только у него используется ф-я которая в sql2000 не существует.

update t1
set id = (select count(*) from T as t2 where t2.date <= t1.date)
from T as t1
Разумеется, даты должны быть уникальными.
27 май 09, 11:46    [7233304]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить