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

Откуда: Новокузнецк
Сообщений: 602
Как средствами TRANSACT-SQL задать столбцу свойство IDENTITY.
29 апр 04, 18:07    [658000]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
См BOL: alter table
29 апр 04, 18:07    [658001]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
Может я маленько неточно сформулировал. Надо задать свойство уже имеющемуся столбцу. В BOL написано, как создать новый столбец с этим свойством. Но я ничего не нашел для действующего.
29 апр 04, 18:10    [658006]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
alter column?
Вообще, можно открыть EM, открыть Design Table, сделать какое-нить поле identity и, не сохраняя, посмотреть, какой код генерит EM(Save Change Script)
29 апр 04, 18:16    [658020]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
А можно поподробнее, как сохраннить сгенерированный EM код
29 апр 04, 18:31    [658066]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
a1ex
Member

Откуда: .ua
Сообщений: 369
да вы хоть попробуйте сначала - EM сам все спросит
29 апр 04, 18:34    [658074]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7310
Еще проще через AccessADP
Конструктор там такой-же как в EM

Делаеш новый проект (ADP)
Присоеденяеш его к базе

На вкладке таблицы правой кл мыши на нужной таблице конструктор

Выбираеш поле
Идентификация да
начало Идентификации xxx
Шаг xxx
закрываеш спрашивает сохранить или нет
29 апр 04, 18:36    [658078]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
2Latuk: ф у меня нету Access'а... Значит мне не повезло?()

Скрипт такой:
BEGIN TRANSACTION

SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_Table2
(
tets bigint NOT NULL IDENTITY (1, 1)
) ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_Table2 ON
GO
IF EXISTS(SELECT * FROM dbo.Table2)
EXEC('INSERT INTO dbo.Tmp_Table2 (tets)
SELECT tets FROM dbo.Table2 TABLOCKX'
)
GO
SET IDENTITY_INSERT dbo.Tmp_Table2 OFF
GO
DROP TABLE dbo.Table2
GO
EXECUTE sp_rename N'dbo.Tmp_Table2', N'Table2', 'OBJECT'
GO
COMMIT

Операция не рядовая, для чего это понадобилось?
29 апр 04, 18:39    [658093]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
Katrine
Member

Откуда:
Сообщений: 60
:Гавриленко Сергей Алексеевич

Подобная задача может появляться в случае перегонки базы с Oracle, например. Если перегонять по стандартному сценарию, то таблицы формируются новые, и уже потом в них записываются данные. Identity, конечно, автоматически не устанавливаются.
29 апр 04, 19:06    [658139]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
Опять же, создается новый столбец со значением IDENTITY.

И как в зазоры между значениями вставить - это тоже известно и прекрасно описано в BOL.

А надо в СУЩЕСТВУЮЩИЙ СТОЛБЕЦ вставить значение IDENTITY.

Планируется много баз из ACCESS переводить в SQL, так там при импорте данных счетчик не становится IDENTITY, а руками открывать каждую таблицу и устанавливать - облесть можно.
29 апр 04, 19:06    [658140]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
Получается, что вроде способа нет.

Тогда будем делать так:


EXEC sp_rename 'MyTable.ID', 'ID1', 'COLUMN'

ALTER MyTable ADD ID int PRIMARY KEY IDENTITY

SET IDENTITY_INSERT MyTable ON

UPDATE MyTable SET ID = ID1

SET IDENTITY_INSERT MyTable OFF

30 апр 04, 04:48    [658433]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Тогда будем делать так:
Вот только SET IDENTITY_INSERT действует только для INSERT. А для UPDATE не действует
30 апр 04, 10:00    [658722]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7310
>у меня нету Access'а... Значит мне не повезло?(
Это значит что тебе повезло :))
30 апр 04, 10:40    [658854]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
2Glory

Да, не учел ...

Ну тогда другой выход: переименовывать старую таблица в что-то типа MyTableOld.

Создавать новую пустую с той же структурой типа

SELECT TOP 0 * INTO MyTable FROM MyTableOld,

дальше по предыдущему сценарию, только вместо UPDATE - INSERT
30 апр 04, 19:14    [660536]     Ответить | Цитировать Сообщить модератору
 Re: Как задать свойство IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Создавать новую пустую с той же структурой типа
Главное не забыть про все default-ы, constraint-ы(особенно FK), trigger-а и тп. И конечно же про права, назначенные кому-то на таблицу
1 май 04, 12:26    [660853]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить