Я здогадуюсь, що це було обмеження внаслідок реалізації. Дозволити це налаштування на кількох столах було потенційним враженням від ефективності:
Оскільки це параметр сеансу, дозволяючи активувати налаштування на одній таблиці, це означає, що це простий прапор та ідентифікатор об'єкта таблиці для зберігання на сеансі на стороні сервера. Можливо, це лише одне ціле число: 0, якщо жоден IDENTITY_INSERT не активний, і деяке кодування databaseid + objectid для таблиці.
Дозволити встановлення параметра в декількох таблицях протягом сеансу означатиме, що сервер буде зберігати динамічний список таких об'єктів і перевіряти його на кожне оператор вставки. Уявіть, що сеанс активує параметр для тисячі таблиць:
- Це означає, що сервер виділив 1000 елементів у змінній сесії
- Це також означає, що сервер повинен перевіряти список 1000 елементів для кожного оператора вставки в цьому сеансі.
Також я підозрюю, що встановлення ident_insert увімкнено ефективність на сервері. У sybase був " фактор набору ідентичності запису ", який дозволив зберегти значення лічильника ідентичності таблиці, що зберігається лише один раз (значення зберігається в пам'яті та записується на диск раз у раз і на сервер закрити ). SQL Server базується на одному і тому ж коді, тому, ймовірно, має порівнянну оптимізацію, але активація ідентифікатора_інсерту в таблиці, ймовірно, обмежує сервер зберігати значення ідентичності для кожної вставки, тому що в іншому випадку він не може гарантувати максимальний розмір проміжку. Отже, якщо один сеанс робить показник продуктивності для вставок в одну таблицю, це, ймовірно, прийнятно, але ні, якщо він може зробити хіт perf у всіх таблицях auto_increment на сервері ..