Установка идентификатора для включения или выключения на SQL-сервере
Я хочу установить свойство Is Identity столбца и после вставки явного значения, чтобы он снова включался. Я написал этот запрос:
SET IDENTITY_INSERT Tbl_Cartoons OFF
Хотя он выполняется успешно, в дизайне таблицы ничего не меняется.
Пожалуйста, предложите решение, это действительно важно.
Ответы
Ответ 1
Вся строка, которую вы указали, - это отключить идентификатор, чтобы вы могли вставлять определенные значения в свой столбец идентификационной информации - обычно это необходимо для одноразовых операций, таких как перемещение данных. Идентичность все еще присутствует в колонке, ее просто не действуют. Концептуально это похоже на разницу между отключением и удалением триггеров.
Удаление идентификатора из столбца целиком сложнее. Вопрос охватывает это, но основная идея заключается в том, что вам нужно создать новый столбец, скопировать данные и удалить столбец идентификатора.
Ответ 2
Фактически вы хотите использовать SET IDENTITY_INSERT Tbl_Cartoons ON
, прежде чем пытаться вставить явные значения.
Вы говорите, что " I будет отвечать за вставку значений в столбец IDENTITY
.
SET IDENTITY_INSERT Tbl_Cartoons OFF
говорит: "Я позволю системе взять на себя ответственность за вставку значений в столбец IDENTITY
".
Ответ 3
Чтобы вставить явные значения в столбец идентификатора, выполните следующие действия:
SET IDENTITY_INSERT Tbl_Cartoons ON
GO
-- code to insert explicit ID values
SET IDENTITY_INSERT Tbl_Cartoons OFF
GO
Ответ 4
В сеансе, который устанавливает SET IDENTITY_INSERT
, разрешено вводить явные значения.
Но столбец по-прежнему является столбцом идентификации. Это просто, что ваша сессия может игнорировать ограничение личности.
Ответ 5
Установите identity_insert для того, чтобы явным образом установить значение столбца id. Снова установите его для автоматического назначения.
Ответ 6
Вы можете отключить свойство 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