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

Откуда: Череповец
Сообщений: 689
Сервер MSSQL2005 на Win2003Srv, база 150 Гб. в таблице ключевое поле identity.
Нужно изменить значение ключевого поля на некоторую величину. Как это лучше сделать, что бы не сильно перегружать сервер ???

я придумал только:

select * into tmp from tab where p1=2

 delete from tab where p1=2

 insert into tab(k,....)
 select k-500,...
 from tmp
3 дек 09, 14:35    [8014489]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
1)
set identity_insert ...

PS
может ещё такое кому нужно
2)
USE AdventureWorks;
GO
DBCC CHECKIDENT ("HumanResources.Employee", RESEED, 30);
GO
3 дек 09, 14:37    [8014511]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
RoVS
Member

Откуда: Череповец
Сообщений: 689
Konst_One,

да, конечно, это я сделаю, тут вопрос в другом объем базы около 35 млн.записей, у меня пользователи работать не смогут....
3 дек 09, 14:43    [8014571]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
можно еще добавить новый столбец в эту таблицу, заапдейтить с нужным вам сдвигом, потом убрать идентити с первого столбца и переназначить на новый, а первый потом удалить
3 дек 09, 14:46    [8014599]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Konst_One
можно еще добавить новый столбец в эту таблицу, заапдейтить с нужным вам сдвигом, потом убрать идентити с первого столбца и переназначить на новый, а первый потом удалить
Свойство IDENTITY присваивается полю только в момент создания этого поля.
А уничтожается только в момент удаления поля.
3 дек 09, 14:50    [8014629]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
да, точно, что это я расфантазировался. через вспомогательную таблицу only

3 дек 09, 14:52    [8014648]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
RoVS
Member

Откуда: Череповец
Сообщений: 689
т.е. других вариантов нету??? разве что курсор использовать, дабы сервер не сильно тормозил...
3 дек 09, 15:03    [8014751]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
RoVS
т.е. других вариантов нету??? разве что курсор использовать, дабы сервер не сильно тормозил...
А курсор-то тут при чём!?
3 дек 09, 15:38    [8015079]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31170
RoVS
т.е. других вариантов нету??? разве что курсор использовать, дабы сервер не сильно тормозил...
Что сделать - то нужно???
Чем CHECKIDENT не подошёл?
3 дек 09, 15:45    [8015139]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
RoVS
Member

Откуда: Череповец
Сообщений: 689
alexeyvg,

Нужно изменить ключевые поля identity, в таблице, в уже имеющихся записях
3 дек 09, 16:10    [8015360]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
RoVS
Member

Откуда: Череповец
Сообщений: 689
iap
RoVS
т.е. других вариантов нету??? разве что курсор использовать, дабы сервер не сильно тормозил...
А курсор-то тут при чём!?


что-бы не было длинной транзакции
3 дек 09, 16:11    [8015367]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
RoVS
Member

Откуда: Череповец
Сообщений: 689
RoVS
alexeyvg,

Нужно изменить ключевые поля identity, в таблице, в уже имеющихся записях


причем значения идут не подряд, а спропусками, и значение нужно изменить на конкретную величину....
3 дек 09, 16:13    [8015388]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
так а чем тогда не подходит:
SET IDENTITY_INSERT [Table1] ON


update [Table1] 
SET ID = ID+500


SET IDENTITY_INSERT [Table1] OFF

такое надо?
3 дек 09, 16:19    [8015446]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
так нельзя, не проверил
3 дек 09, 16:23    [8015491]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить значение поля identity ???  [new]
RoVS
Member

Откуда: Череповец
Сообщений: 689
Запустил такую фигню:
set identity_insert temp on

declare k cursor for
select recno_id from pf_oms where filial=2

declare	@rec numeric

open	k

fetch next from k into @rec
while @@FETCH_STATUS=0
begin
	INSERT INTO [SQL_OMS_E1].[dbo].[temp] (recno_id,....)
	select recno_id-50000000, ...... from pf_oms where recno_id=@rec

	fetch next from k into @rec
end

close	k
deallocate	k

set identity_insert temp off
потом запущу вторую часть, обратную этой...
3 дек 09, 16:29    [8015553]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить