Установка идентификатора для включения или выключения в SQL server

Я хочу установить свойство Identity столбца в off и после вставки явного значения, снова установив его в on.Я написал этот запрос :

SET IDENTITY_INSERT Tbl_Cartoons OFF

хотя он выполняется успешно, ничего не меняется в дизайне таблицы. Пожалуйста, предложите решение ,это действительно важно.

6 ответов


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

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


вы действительно хотите использовать SET IDENTITY_INSERT Tbl_Cartoons ON перед попыткой вставить явные значения.

ты говоришь, что"Я Я буду отвечать за вставку значений в


чтобы вставить явные значения в столбец identity, выполните следующие действия:

SET IDENTITY_INSERT Tbl_Cartoons  ON
GO

-- code to insert explicit ID values

SET IDENTITY_INSERT Tbl_Cartoons  OFF
GO

сеанс, который устанавливает SET IDENTITY_INSERT разрешено вводить явные значения.

но колонки по-прежнему является столбцом идентификаторов. Просто ваш сеанс может игнорировать ограничение identity.


Set identity_insert on, чтобы иметь возможность явно установить значение столбца id. Установите его снова для автоматического назначения.


вы can отключите свойство Identity, но оно включает редактирование системных таблиц, что не считается хорошей практикой. Вы также вряд ли будете иметь необходимые права, и, вероятно, увидите You do not have permission to run the RECONFIGURE statement попытка выполнить следующий код:

DECLARE @tableName nvarchar(128) = 'YourTable';

-- Get a list of identity columns (informational)
SELECT OBJECT_NAME(object_id) tableName, sc.name colName, st.name dataType
FROM sys.columns sc
JOIN sys.types st
    ON st.system_type_id = sc.system_type_id
WHERE sc.is_identity = 1
AND OBJECT_NAME(object_id) = @tableName

-- Allow ad-hoc changes to system catalogs
EXEC  sp_configure 'allow update', 1
GO
reconfigure with override
GO
-- Eliminate the identityness
UPDATE syscolumns SET colstat = colstat - 1
WHERE id = object_id(@tableName)
AND name = 'Id' -- Specify column if you like, though only one identity per table is currently supported
GO
-- Unallow ad-hoc changes to system catalogs
exec sp_configure 'allow update', 0
GO
reconfigure with override
GO