我想列的是一种身份属性设置为关闭,插入一个明确的价值将其设置为在again.I've写此查询后:
SET IDENTITY_INSERT Tbl_Cartoons OFF
虽然它成功执行,没有在表中的设计变更。 请提出一个解决方案,这是真正的关键。
我想列的是一种身份属性设置为关闭,插入一个明确的价值将其设置为在again.I've写此查询后:
SET IDENTITY_INSERT Tbl_Cartoons OFF
虽然它成功执行,没有在表中的设计变更。 请提出一个解决方案,这是真正的关键。
你给做的所有行是禁用的身份,使您可以插入特定的值到您的身份列 - 通常这是需要一次性的,如中移动数据。 身份仍然存在对列,它只是没有采取行动。 从概念上讲这类似于禁用和删除触发器之间的差异。
从柱中移除身份完全是更难。 问题涵盖了它 ,但基本的想法是,你必须创建一个新列,通过数据复制,然后取下标识列。
实际上,你想用SET IDENTITY_INSERT Tbl_Cartoons ON
试图插入显式值之前。
你说,“ 我要负责将值插入到IDENTITY
列”。
SET IDENTITY_INSERT Tbl_Cartoons OFF
说:“我将让系统承担责任,将值插入到IDENTITY
列”。
要插入显式值插入标识列,请执行以下操作:
SET IDENTITY_INSERT Tbl_Cartoons ON
GO
-- code to insert explicit ID values
SET IDENTITY_INSERT Tbl_Cartoons OFF
GO
该设置会话SET IDENTITY_INSERT
被允许进入明确的价值观。
但列仍然是一个标识列。 这只是你的会话可以忽略标识约束。
SET IDENTITY_INSERT上能够明确设置ID列的值。 再次将它关闭,以自动分配。
您可以关闭的身份属性,但它涉及到其不被认为是一个很好的做法编辑系统表。 你也不太可能有必要的权限,并可能会看到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