Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
Надо добавить в таблицу новую колонку IDENTITY, но по хитрому для неё получить seed
автор
DECLARE @V_MAX_COMMENTS int
set @V_MAX_COMMENTS=(select max(COMMENTS_ID) from pods.COMMENTS)

select @V_MAX_COMMENTS+1;
--24450377
-- так работает
ALTER TABLE PODS.COMMENTS ADD COL int IDENTITY(24450377,1) NOT NULL;

-- а сделать надо так :
ALTER TABLE PODS.COMMENTS ADD COL int IDENTITY(@V_MAX_COMMENTS,1) NOT NULL;


Подскажите, пожалуйста.
21 окт 14, 14:54    [16737185]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104751
DBCC CHECKIDENT()
21 окт 14, 14:56    [16737205]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
в таблице нет столбца идентификаторов
21 окт 14, 15:02    [16737276]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104751
Тогда динамический запрос
Или
Создаете новую таблицу с нужным seed
переливаете данные
удаляете старую таблицу
переименовываете таблицу

Сообщение было отредактировано: 21 окт 14, 15:07
21 окт 14, 15:06    [16737311]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
msLex
Member

Откуда:
Сообщений: 9277
Aliona
в таблице нет столбца идентификаторов

msdn
DBCC CHECKIDENT
(
table_name
[, { NORESEED | { RESEED [, new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
21 окт 14, 15:06    [16737317]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Эээ зачем seed устанавливать, не пойму, боитесь, что он с 1 начнет считать? Чёт Вы хотите сама себя перехитрить
21 окт 14, 15:13    [16737417]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
msLex
Aliona
в таблице нет столбца идентификаторов

msdn
DBCC CHECKIDENT
(
table_name
[, { NORESEED | { RESEED [, new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

SQL Server 2008
я это уже попробовала
автор
DBCC CHECKIDENT(COMMENTS,NORESEED,@V_MAX_COMMENTS)

Параметр 3 недопустим для данной инструкции DBCC.
21 окт 14, 15:15    [16737431]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
Владислав Колосов
Эээ зачем seed устанавливать, не пойму, боитесь, что он с 1 начнет считать? Чёт Вы хотите сама себя перехитрить

у меня такое задание :)
21 окт 14, 15:16    [16737445]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
msLex
Member

Откуда:
Сообщений: 9277
Aliona
DBCC CHECKIDENT(COMMENTS,NORESEED,@V_MAX_COMMENTS)

почему NORESEED?
21 окт 14, 15:17    [16737447]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
автор
DECLARE @V_MAX_COMMENTS int
set @V_MAX_COMMENTS=(select max(COMMENTS_ID) from pods.COMMENTS)

select @V_MAX_COMMENTS+1;


у меня таких таблиц сотни, без PK и без IDENTYTY
надо в пустую колонку COMMENTS_ID_NEW вставить новую нумерацию, начинающуюся с max(COMMENTS_ID)+1

В другой ветке прочитала, что лучше добавить новую колонку с IDENTITY, а потом её удалить.
Этот опыт у меня удался, вот только начальное значение для IDENTITY надо получать из константы или переменной
21 окт 14, 15:26    [16737541]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aliona
В другой ветке прочитала, что лучше добавить новую колонку с IDENTITY, а потом её удалить.

И как удаленное поле identity продолжит нумерацию ?
21 окт 14, 15:29    [16737560]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
Glory
Aliona
В другой ветке прочитала, что лучше добавить новую колонку с IDENTITY, а потом её удалить.

И как удаленное поле identity продолжит нумерацию ?

мне не надо продолжать нумерацию.

Я выше задачу описала, следующие шаги мне неведомы, как выполню этот шаг, получу следующее задание.
Это не промышленная база, в ней готовятся данные для заливку в другую базу.
21 окт 14, 15:38    [16737647]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
данные в базу уже все залиты, теперь по-хитрому изменяются ID.
21 окт 14, 15:40    [16737667]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aliona
Я выше задачу описала,

Если конечным итогом задачи будет удаление поля identity, то зачем что то делать с ним до этого ?
Все равно после удаления никто не узнает, какие значения были в этом поле
21 окт 14, 15:40    [16737670]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Aliona
данные в базу уже все залиты, теперь по-хитрому изменяются ID.

для залитых записей никакм сбросом идентити вы значения не поменяете . Только командой апдейт .
Изменения идентити будет влиять только на новые записи.
21 окт 14, 15:43    [16737693]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
Glory
Aliona
Я выше задачу описала,

Если конечным итогом задачи будет удаление поля identity, то зачем что то делать с ним до этого ?
Все равно после удаления никто не узнает, какие значения были в этом поле

Перед удалением его значения перемещу в пустое поле, которое тау уже есть COMMENTS_ID_NEW

IDENTITY - не самоцель,
надо заполнить пустое поле COMMENTS_ID_NEW
вот такими значениями:
НОМЕР_СТРОКИ + select max(COMMENTS_ID)+1 from pods.COMMENTS

Сиквенций в моей версии ma sql нет
21 окт 14, 15:52    [16737780]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
вот человек спрашивал подобное
https://www.sql.ru/forum/1055233-2/obnovit-tablicu-zadav-kazhdoy-stroke-row-number
21 окт 14, 15:57    [16737822]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Как Вы собираетесь вычислить номер_строки?
21 окт 14, 15:57    [16737823]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aliona
вот такими значениями:
НОМЕР_СТРОКИ + select max(COMMENTS_ID)+1 from pods.COMMENTS


UPDATE mytable SET @V_MAX_COMMENTS = <какое-то поле> = @V_MAX_COMMENTS+1
21 окт 14, 15:58    [16737825]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
сработало:
автор
DECLARE @V_MAX_COMMENTS numeric(16, 0)
set @V_MAX_COMMENTS=(select max(COMMENTS_ID) from pods.COMMENTS)

UPDATE PODS.COMMENTS set @V_MAX_COMMENTS=COMMENTS_ID_NEW=@V_MAX_COMMENTS+1
21 окт 14, 16:15    [16738020]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Aliona
Member

Откуда: Питер, Москва
Сообщений: 4087
Спасибо большое.
21 окт 14, 16:16    [16738027]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104751
Aliona
сработало:

Потому что всегда надо рассказывать про задачу, а не про выбранный вами способ решения
21 окт 14, 16:17    [16738032]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
WITH CTE AS(SELECT COMMENTS_ID_NEW, N=24450377+ROW_NUMBER()OVER(ORDER BY (SELECT 0)) FROM PODS.COMMENTS)
UPDATE CTE SET COMMENTS_ID_NEW=N;
Так что ли?
21 окт 14, 16:18    [16738040]     Ответить | Цитировать Сообщить модератору
 Re: помогите с синтаксисом для IDENTITY  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Можно было использовать и Identity, обновив этот столбец значениями @V_MAX_COMMENTS + COMMENTS_ID_NEW.
21 окт 14, 16:40    [16738303]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить