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

At any time, only one table in a session can have the IDENTITY_INSERT property set to ON. If a table already has this property set to ON, and a SET IDENTITY_INSERT ON statement is issued for another table, SQL Server returns an error message that states SET IDENTITY_INSERT is already ON and reports the table it is set ON for.


внимание, вопрос:
можно ли проверить, что уже для другой таблицы установлено ON?

сама история: человек мне жалуется, что не может вставить свои значения в поле identity.
отвечаю про IDENTITY_INSERT.
снова жалуется: я вот его выставляю в ON,
а мне пишут, что уже выставлено в ON!
тыкаю, что там выставлено для другой таблицы, сервер в ошибке указывает, для кого уже выставлено.
причем понятно, кто выставил, раз сессия все та же.
значит, меня спрашивают, откуда такое ограничение на всего 1 таблицу с IDENTITY_INSERT ON на сессию
и как проверить, что уже выставлено кому-то.

как бы можно отлавливать ошибку и парсить имя таблицы,
и вообще мне непонятно: если сессия твоя, то выставляй OFF после ON и не будет проблем!
но тем не менее, вопрос задан, а ответа я не знаю.
поделитесь, если кто в курсе, откуда сие ограничение и можно ли как-то опросить
на предмет не выставлено ли уже какой-то таблице ON
7 июн 13, 13:07    [14405760]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
IDENTITY_INSERT,

в сообщении об ошибке ясно написано,
на какую таблицу установлено IDENTITY_INSERT ON
7 июн 13, 13:10    [14405786]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
IDENTITY_INSERT,

в сообщении об ошибке ясно написано,
на какую таблицу установлено IDENTITY_INSERT ON
Извините, не разглядел: Вы уже об этом написали
7 июн 13, 13:11    [14405792]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
IDENTITY_INSERT
Guest
да мне тоже непонятна сама проблема.
интересуюсь чисто потому, что раз есть ограничение,
откуда-то оно растет.
и раз сервер проверяет, то наверное и юзер в состоянии проверить.
хотя и необязательно, в виду (на мой взгляд) бесполезности:
сессия твоя, твои проблемы чтобы ON-у соответсвовал OFF
7 июн 13, 13:19    [14405867]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
IDENTITY_INSERT
можно ли как-то опросить
на предмет не выставлено ли уже какой-то таблице ON
http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/1a6ba2bb-5e82-47e8-a1a0-16fc044b951e/
Since SET IDENTITY_INSERT is a session sensitive, it is managed in buffer level without storing somewhere.
7 июн 13, 13:46    [14406111]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
IDENTITY_INSERT
Guest
офигеть!!!
чисто из спортивного интереса анализирую имя таблицы, что сервер выдает в ошибке,
если уже установлено IDENTITY_INSERT ON.
так он там не ту схему подставляет.
от той таблицы, на к-ую пытаюсь установить,
а не от той, где установлено.
баговина, однако.

скриптец:
create database id_ins;
go

use id_ins;
go

create schema a;
go

create table dbo.t1(id int identity);
create table a.t2(id int identity);
go

set identity_insert dbo.t1 on;

set identity_insert a.t2 on;


Msg 8107, Level 16, State 1, Line 4
IDENTITY_INSERT is already ON for table 'id_ins.a.t1'. Cannot perform SET operation for table 'a.t2'.


id_ins.a.t1

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (Intel X86) Jun 28 2012 08:42:37 Copyright (c) Microsoft Corporation Express Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
7 июн 13, 13:51    [14406157]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> баговина, однако.

обещали, что поправят в следующей версии.
https://connect.microsoft.com/SQLServer/feedback/details/517923/set-identity-insert-already-on-error-message-always-returns-dbo-schema-name#details
7 июн 13, 14:08    [14406272]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
Гость333
Member

Откуда:
Сообщений: 3683
daw
обещали, что поправят в следующей версии

Собственно, из их ответов следует, что баг исправлен в MSSQL 2012.
7 июн 13, 14:11    [14406291]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Гость333
daw
обещали, что поправят в следующей версии

Собственно, из их ответов следует, что баг исправлен в MSSQL 2012.
Проверил - всё нормально
7 июн 13, 14:16    [14406332]     Ответить | Цитировать Сообщить модератору
 Re: проверить, что установлено IDENTITY_INSERT  [new]
IDENTITY_INSERT
Guest
капец какой-то.
по "счастливому совпадению" у товарища как раз 2 разные схемы, где 2 одинаковые таблицы
(в смысле, имена таблиц совпадают).
я вот не верила, что сервер ему не написал про ДРУГУЮ таблицу,
а он клялся, что все про одну и ту же пишет.
надо же, выходит, ему и правда про одну и ту же писал.
вот он опупевал-то: ставит ON, а ему пишут, не могу, уже на нее выставлено ON.
ходит теперь, торжествует.

а тот линк неправильно называется.
dbo вообще ни при чем.
это еще я его в своем примере использовала,
а у товарища обе схемы отличные от dbo.
в ошибку подставляется именно от той таблицы, на к-ую пытаешься выставить ON.

ну поправили и бог с ними.
но у нас-то 2008-ой сервер...
7 июн 13, 14:30    [14406413]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить