列のIs Identityプロパティをoffに設定し、明示的な値を挿入した後、再びonに設定します。このクエリを記述しました。
SET IDENTITY_INSERT Tbl_Cartoons OFF
正常に実行されますが、テーブルのデザインに変更はありません。解決策を提案してください、それは本当に重要です。
指定した行はすべて、IDを無効にして、ID列に特定の値を挿入できるようにすることです。通常、これはデータの移動などの1回限りの操作に必要です。アイデンティティはまだ列の上にあり、行動されていないだけです。概念的には、これはトリガーの無効化と削除の違いに似ています。
列からIDを完全に削除するのは困難です。 質問でカバーされます 、しかし、基本的な考え方は、新しい列を作成し、データをコピーしてから、ID列を削除する必要があるということです。
実際に使用したいのはSET IDENTITY_INSERT Tbl_Cartoons ON
明示的な値を挿入する前に。
「[〜#〜] i [〜#〜]が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
を設定するセッションは、明示的な値を入力できます。
ただし、列は依然としてID列です。セッションがID制約を無視できるということだけです。
Id列の値を明示的に設定できるように、identity_insertをオンに設定します。再度割り当てて、自動割り当てを行います。
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