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

Откуда:
Сообщений: 89
Доброго времени суток уважаемые.

Мучаем друг друга, я и MS-SQL. :)
Теоретический вопрос: Возможно ли скриптом изменить начальное значение IDENTITY в пустой таблице?
Не могу подобрать из хелпа комбинацию параметров.
1. Это в принципе возможно? Если да, то бросьте пожалуйста сюда скриптик.
2. Есть ли какие-то ограничения: по типу полей, наличию индексов и т.п., когда в пустой таблице изменить начальное значение IDENTITY невозможно?
5 янв 17, 19:11    [20075561]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
o-o
Guest
Хоть в пустой, хоть в непустой, нельзя поменять.
Можно пересоздать таблицу с новым значением
5 янв 17, 19:30    [20075596]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
aleks2
Guest
https://msdn.microsoft.com/ru-ru/library/ms176057.aspx
DBCC checkident


И менять можно на любой таблице. Хоть пустой, хоть полной.
5 янв 17, 19:31    [20075599]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
aleks2
Guest
Тот же эффффффект производит
SET IDENTITY INSERT ON
5 янв 17, 19:34    [20075610]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
o-o
Guest
Он спросил про начальное, а не про текущее значение
5 янв 17, 19:34    [20075613]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
ПГС
Member

Откуда:
Сообщений: 89
aleks2, Спасибо! :)
5 янв 17, 19:34    [20075614]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
PetrovichSK
Guest
ПГС,

Это?
CREATE TABLE #Test (Id INT IDENTITY(1, 1) PRIMARY KEY, V CHAR(1));
DBCC CHECKIDENT ('#Test', RESEED, 10);  
INSERT INTO #Test(V) VALUES('q'), ('w');
SELECT * FROM #Test;
DROP TABLE #Test;
5 янв 17, 19:35    [20075616]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
ПГС
Member

Откуда:
Сообщений: 89
o-o
Он спросил про начальное, а не про текущее значение

В пустой таблице начальное значение = текущему
5 янв 17, 19:35    [20075617]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
aleks2
Guest
o-o
Он спросил про начальное, а не про текущее значение

Ща ты нам розжуешь тонкую разницу?
5 янв 17, 19:37    [20075622]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
o-o
Guest
aleks2
Тот же эффффффект производит
SET IDENTITY INSERT ON

Инсерт инсертит.
А он спросил, как начальное значение поменять.
А не как вставлять
5 янв 17, 19:38    [20075626]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
aleks2
Guest
o-o
aleks2
Тот же эффффффект производит
SET IDENTITY INSERT ON

Инсерт инсертит.
А он спросил, как начальное значение поменять.
А не как вставлять


Вставлял ли ты?
Вижу - не вставлял.
5 янв 17, 19:47    [20075645]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
o-o
Guest
aleks2
o-o
Он спросил про начальное, а не про текущее значение

Ща ты нам розжуешь тонкую разницу?

create table dbo.a (id int identity (10,1);
dbcc checkident ('dbo.a', reseed,  0);
insert dbo.a default values;
-- вставил 0, молодец 
-- а начальное значение поменял? 
select seed_value
from sys.identity_columns
where object_id = object_id ('dbo.a') and column_id = 1;

Разницу видишь или все еще нет?
А если я не собираюсь вообще вставлять?
Сид я могу опросить всегда, и он все тот же.
ТС спрашивал про сид, он же начальное значение,
и совсем не "как *напихать* что-то другое"
5 янв 17, 20:05    [20075673]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
o-o
Guest
aleks2
o-o
пропущено...

Инсерт инсертит.
А он спросил, как начальное значение поменять.
А не как вставлять


Вставлял ли ты?
Вижу - не вставлял.

А ты вопрос читал ли?
Вижу, не читал, а все долбишь одно и то же.
где у него про вставку?
Протри-ка глазки да ткни пальчиком.
----
Ты поделай свой dbcc checkident до усрачки, повставляй, вдруг поможет.
А потом заскриптуй свою таблицу в студии,
да посмотри, какое там начальное значение identity.
5 янв 17, 20:12    [20075688]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
aleks2
Guest
o-o
aleks2
пропущено...

Ща ты нам розжуешь тонкую разницу?

create table dbo.a (id int identity (10,1);
dbcc checkident ('dbo.a', reseed,  0);
insert dbo.a default values;
-- вставил 0, молодец 
-- а начальное значение поменял? 
select seed_value
from sys.identity_columns
where object_id = object_id ('dbo.a') and column_id = 1;

Разницу видишь или все еще нет?
А если я не собираюсь вообще вставлять?
Сид я могу опросить всегда, и он все тот же.
ТС спрашивал про сид, он же начальное значение,
и совсем не "как *напихать* что-то другое"


Ты и правда веришь, что некая запись в некоей системной таблице имеет значение?
Бедолага.
Учись зрить в корень!

ЗЫ. Тредстартер, да и я тоже, отродясь не слышали и не видели этого системного представления. Ибо оно нафег не нужно.
6 янв 17, 06:44    [20076829]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
o-o
Guest
aleks2
o-o
пропущено...

create table dbo.a (id int identity (10,1);
dbcc checkident ('dbo.a', reseed,  0);
insert dbo.a default values;
-- вставил 0, молодец 
-- а начальное значение поменял? 
select seed_value
from sys.identity_columns
where object_id = object_id ('dbo.a') and column_id = 1;

Разницу видишь или все еще нет?
А если я не собираюсь вообще вставлять?
Сид я могу опросить всегда, и он все тот же.
ТС спрашивал про сид, он же начальное значение,
и совсем не "как *напихать* что-то другое"


Ты и правда веришь, что некая запись в некоей системной таблице имеет значение?
Бедолага.
Учись зрить в корень!

ЗЫ. Тредстартер, да и я тоже, отродясь не слышали и не видели этого системного представления. Ибо оно нафег не нужно.

Один вылазит на форум с неправильно сформулированным вопросом(хочет узнать о вставке произвольных значений, но спрашивает о свойствах поля, которые поменять нельзя), второй такой же неуч о свойстве identity впервые слышит, но упорствеут в своем неправильном ответе и раздает всем эпитеты направо и налево.
Тебе, хамло, правильно сказали про телят, задолбал уже всем тыкать и считать себя пупом земли.
Мне неинтересно знать подробности твоего незнания на тему, где и как сервер хранит свойства identity.
Но ты очень удивишься однажды, когда перенесешь свои (или чьи-то) таблицы скриптами с якобы переправленными вставками свойствами полей.
Ибо вставка в перенесенные таблицы начнется именно с заданного начального значения, о котором сервер знает, и вовсе не с тех значений, что ты вручную правдами и неправдами вносил в неправильно созданные таблицы.
Только это твои проблемы, если не знаешь, что параметры identity перезадать нельзя. Хорош уже рекламировать твое видение мира, здесь и вменяемые люди читают, ТС уже нашел то, что искал, остальные, надеюсь, уяснили, что свойства identity задаются раз и навсегда и не меняются никак, в отличие от параметров sequence
6 янв 17, 10:27    [20076938]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
ПГС
Member

Откуда:
Сообщений: 89
Уважаемые, подскажите пожалуйста, как скриптом отменить свойство IDENTITY у колонки в пустой таблице?
Т.е. чтобы поле (колонка) превратилась в обычное поле, с возможностью модификации.
ALTER TABLE <table> ALTER COLUMN... ?

Прошу не пинать, я изучаю матчасть :)
6 янв 17, 10:36    [20076951]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
ПГС
Т.е. чтобы поле (колонка) превратилась в обычное поле, с возможностью модификации.

drop column, add column
6 янв 17, 10:40    [20076956]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
ПГС
Member

Откуда:
Сообщений: 89
Knyazev Alexey
ПГС
Т.е. чтобы поле (колонка) превратилась в обычное поле, с возможностью модификации.

drop column, add column


Без удаления столбца есть варианты?
6 янв 17, 10:41    [20076960]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
ПГС
Knyazev Alexey
пропущено...

drop column, add column


Без удаления столбца есть варианты?


к сожалению...
6 янв 17, 10:45    [20076966]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
как вариант select ... into, но это уже создание новой таблицы и удаление старой...
6 янв 17, 10:46    [20076967]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
ПГС
Member

Откуда:
Сообщений: 89
o-o
...Один вылазит на форум с неправильно сформулированным вопросом(хочет узнать о вставке произвольных значений, но спрашивает о свойствах поля, которые поменять нельзя), ....

Я хотел узнать именно то, что написал в первом сообщении, т.е. о возможности (или невозможности) изменить свойство IDENTITY.
Если бы я захотел узнать о вставке произвольных значений, я бы спросил об этом явно.
Тем не менее я благодарен и Вам тоже, за то что Вы приняли участие в этой дискуссии.
Печально, то, что эта дискуссия переросла в фаллометрию.
Это не украшает участников. :(
6 янв 17, 10:49    [20076973]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
o-o
Guest
кстати, другое следствие невозможности изменения опций identity
проявится и без скриптования: достаточно транкейтить таблицу.
после truncate table вставка начнется с того самого начального значения,
указанного при создании таблицы, и вовсе не с того, чего там наменял aleks2 своими checkident
6 янв 17, 10:54    [20076981]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
Забавно, человек приводит ссылку, где чёрным по белому написано:
Изменение начального значения
Начальное значение представляет собой значение, вставляемое в столбец идентификаторов для самой первой строки, загружаемой в таблицу. Все последующие строки содержат текущее значение идентификатора, увеличенное на значение приращения, где текущее значение идентификатора представляет собой последнее значение идентификатора, сформированное для таблицы или представления.

Инструкцию DBCC CHECKIDENT нельзя использовать для выполнения следующих задач.

  • Изменение исходного начального значения, которое было указано для столбца идентификаторов при создании таблицы или представления.

  • Повторное указание начального значения для существующих строк в таблице или представлении.

    Чтобы изменить исходное начальное значение и повторно задать начальное значение для каких-либо существующих строк, необходимо удалить столбец идентификаторов и создать его повторно, указав новое начальное значение. Если таблица содержит данные, то номера идентификаторов добавляются к существующим строкам с учетом указанного начального значения и приращения. Порядок, в котором выполняется обновление строк, не гарантирован.

  • А потом зачем-то спорит :)
    6 янв 17, 10:56    [20076983]     Ответить | Цитировать Сообщить модератору
     Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
    ПГС
    Member

    Откуда:
    Сообщений: 89
    o-o
    кстати, другое следствие невозможности изменения опций identity
    проявится и без скриптования: достаточно транкейтить таблицу.
    после truncate table вставка начнется с того самого начального значения,
    указанного при создании таблицы,.....

    Спасибо за комментарий. ;)
    Из этой ветки, я понял, что пытаться менять IDENTITY - неправильно.
    Еще вопрос, если не затруднит: возможно ли обычной колонке в уже созданной
    1. пустой;
    2. непустой
    таблицах присвоить свойство IDENTITY, при условии, что для непустой таблицы содержимое колонки не противоречит вновь создаваемому свойству?
    6 янв 17, 11:00    [20076993]     Ответить | Цитировать Сообщить модератору
     Re: Возможно ли изменить начальное значение IDENTITY в пустой таблице скриптом?  [new]
    o-o
    Guest
    ПГС
    o-o
    ...Один вылазит на форум с неправильно сформулированным вопросом(хочет узнать о вставке произвольных значений, но спрашивает о свойствах поля, которые поменять нельзя), ....

    Я хотел узнать именно то, что написал в первом сообщении, т.е. о возможности (или невозможности) изменить свойство IDENTITY.

    слабо верится.
    вы отблагодарили алекса за его неправильный ответ о вставке.
    мой код показывает именно сохраненные сервером параметры identity,
    они не меняются даже после произвольных вставок и применения dbcc checkident.
    второе подтверждение постом выше: попробуйте после всех манипуляций
    сделать truncate table.
    и увидите истинное начальное значение.

    для сиквенсов есть явные команды
    ALTER SEQUENCE (MINVAL <val>, MAXVAL <val>, RESTART WITH <val>, INCREMENT BY <val>, CYCLE | NO CYCLE, 
    or CACHE <val> | NO CACHE)
    

    для identity их нет.
    но сейчас нарою чего-нибудь офциальное.

    (а про алекса -- уж извините. я на пощечину вторую щеку не подставлю.
    лично я никого не переквалифицирую в управдомы, а на "ты" перехожу исключительно ПОСЛЕ
    того, как некое хамло делает это со мной)
    6 янв 17, 11:02    [20076997]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить