Для особо ленивых: существует ли один оператор, который будет переключать IDENTITY INSERT sometable
из состояния "включено" в положение "выключено" и наоборот?
Переключить вставку идентификатора с помощью одного оператора
Ответы (1)
Нет, нет инструкции toggel identity_insert, и на то есть веские причины:
Значения, автоматически генерируемые базой данных, не должны иметь никакого бизнес-значения.
Использование столбца идентификаторов в качестве суррогатного ключа может помочь упростить работу с базой данных, но приписывать бизнес-значение значениям, которые база данных генерирует для вас, неправильно — это приводит к тому, что люди задают такие вопросы, как "Как исправить пробелы в моем столбце идентификации" (мой личный любимый ответ: этот Аарон Бертран).
Дело в том, что автоматически сгенерированные значения являются очень полезными инструментами, когда вы используете их только так, как они предназначены для использования, а столбец идентификаторов предназначен для предоставления простого идентификатора строки, который увеличивается (или уменьшается) в том порядке, в котором строки были вставил в таблицу.
По этой причине set identity_insert
следует использовать только в очень немногих ситуациях - на самом деле, кроме копирования данных из одной таблицы в другую, когда вы хотите точно сохранить исходные значения - я даже не могу думать о другой ситуации, когда set identity_insert
был бы полезный.
В сочетании с тем фактом, что только одна таблица может находиться в состоянии identity_insert за сеанс, вы сможете легко понять, почему вы не хотите видеть что-то вроде toggle identity_insert
, что в лучшем случае неоднозначно.
tl;dr; Учитывая ограниченное количество раз, когда следует использовать оператор set identity_insert
, и его ограничения, использование оператора toggle identity_insert
— действительно плохая идея.
ON
, ниOFF
. - person DavidG   schedule 05.09.2019ON
илиOFF
должно быть лучше по многим причинам, и это едва ли обременительно - person Diado   schedule 05.09.2019