Установка идентификатора для включения или выключения в 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