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

Откуда:
Сообщений: 32
Нужно вставить записи в табличку в которой может быть или не быть поле с IDENTITY (не известно заранее). Если поле есть, то его нужно временно выключить, а потом (если поле было), его включить.

Я это делаю следующим запросом. Можно ли как-то покороче.

IF (IDENT_INCR('Table') IS NOT NULL OR IDENT_SEED('Table') IS NOT NULL) SET IDENTITY_INSERT Table ON

INSERT INTO Table SELECT * FROM Table1
IF (IDENT_INCR('Table') IS NOT NULL OR IDENT_SEED('Table') IS NOT NULL) SET IDENTITY_INSERT Table OFF
13 фев 03, 17:53    [128739]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу с Identity!  [new]
_Александр_
Member

Откуда:
Сообщений: 120
Странно все это. Уж если вы доверили приложению контролировать уникальность ключей, так пусть оно это и делает. Зачем этот on/off ?
Если вдруг вставляемое значение окажется не уникальным, то при попытке 'on'
ошибка получится.
13 фев 03, 18:11    [128762]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу с Identity!  [new]
Warlib
Member

Откуда:
Сообщений: 32
Это нужно для синхронизации данных (off line) между двумя серверами. Если делать insert для таблицы у которой identity включен, то ошибка получиться.
13 фев 03, 18:27    [128776]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу с Identity!  [new]
ТиБиБи
Member

Откуда: Москва
Сообщений: 906
Чудак-человек. Ошибка получится только из-за некорректных действий...

На практике я использую или Merge-репликацию, или копирование данных с генерацией новых IDENTITY, если по какой-либо причине хочу "перенумеровать" записи...

Если в результате каких-либо действий появляются хотя бы две строки с одинаковым значением в поле IDENTITY, то надо искать и устранять ошибку. ;~)
13 фев 03, 18:53    [128798]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу с Identity!  [new]
Glory
Member

Откуда:
Сообщений: 104760
IF (select objectproperty(object_id('Table'), 'TableHasIdentity')) = 1

SET IDENTITY_INSERT Table ON
INSERT INTO Table SELECT * FROM Table1
IF (select objectproperty(object_id('Table'), 'TableHasIdentity')) = 1
SET IDENTITY_INSERT Table OFF
13 фев 03, 19:01    [128809]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу с Identity!  [new]
Warlib
Member

Откуда:
Сообщений: 32
Спасибо. Последний вариант хорош.
13 фев 03, 21:46    [128885]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить