列の Is Identity プロパティをオフに設定し、明示的な値を挿入して再度オンに設定したい.私はこのクエリを書きました:
SET IDENTITY_INSERT Tbl_Cartoons OFF
正常に実行されますが、テーブルのデザインは何も変わりません。解決策を提案してください、それは本当に重要です。
列の Is Identity プロパティをオフに設定し、明示的な値を挿入して再度オンに設定したい.私はこのクエリを書きました:
SET IDENTITY_INSERT Tbl_Cartoons OFF
正常に実行されますが、テーブルのデザインは何も変わりません。解決策を提案してください、それは本当に重要です。
SET IDENTITY_INSERT Tbl_Cartoons ON
明示的な値を挿入しようとする前に、実際に使用したいと考えています。
あなたは、「列に値を挿入する責任がある」と言っています。IDENTITY
SET IDENTITY_INSERT Tbl_Cartoons OFF
「列に値を挿入する責任をシステムに負わせます」と言いますIDENTITY
。
ID 列に明示的な値を挿入するには、次の手順を実行します。
SET IDENTITY_INSERT Tbl_Cartoons ON
GO
-- code to insert explicit ID values
SET IDENTITY_INSERT Tbl_Cartoons OFF
GO
指定したすべての行は、ID 列に特定の値を挿入できるように ID を無効にすることです。通常、これは、データの移動などの 1 回限りの操作に必要です。ID はまだ列に残っていますが、それが実行されていないだけです。概念的には、これはトリガーの無効化と削除の違いに似ています。
列から ID を完全に削除するのは困難です。質問はそれをカバーしていますが、基本的な考え方は、新しい列を作成し、データをコピーしてから、ID 列を削除する必要があるということです。
設定するセッションSET IDENTITY_INSERT
は、明示的な値を入力できます。
ただし、列は ID 列のままです。セッションがアイデンティティ制約を無視できるというだけです。
id 列の値を明示的に設定できるようにするには、identity_insert を on に設定します。自動割り当てするには、もう一度オフに設定します。
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