web-dev-qa-db-ja.com

SQLサーバーでIDをオンまたはオフに設定する

列のIs Identityプロパティをoffに設定し、明示的な値を挿入した後、再びonに設定します。このクエリを記述しました。

SET IDENTITY_INSERT Tbl_Cartoons OFF

正常に実行されますが、テーブルのデザインに変更はありません。解決策を提案してください、それは本当に重要です。

15
user1831490

指定した行はすべて、IDを無効にして、ID列に特定の値を挿入できるようにすることです。通常、これはデータの移動などの1回限りの操作に必要です。アイデンティティはまだ列の上にあり、行動されていないだけです。概念的には、これはトリガーの無効化と削除の違いに似ています。

列からIDを完全に削除するのは困難です。 質問でカバーされます 、しかし、基本的な考え方は、新しい列を作成し、データをコピーしてから、ID列を削除する必要があるということです。

7
Jon Egerton

実際に使用したいのはSET IDENTITY_INSERT Tbl_Cartoons ON明示的な値を挿入する前に。

[〜#〜] i [〜#〜]IDENTITY列への値の挿入を担当する」と言っています。

SET IDENTITY_INSERT Tbl_Cartoons OFFは、「IDENTITY列に値を挿入する責任をシステムに負わせる」と述べています。

27

識別列に明示的な値を挿入するには、次の手順を実行します。

SET IDENTITY_INSERT Tbl_Cartoons  ON
GO

-- code to insert explicit ID values

SET IDENTITY_INSERT Tbl_Cartoons  OFF
GO
15
Vadim Tychonoff

SET IDENTITY_INSERTを設定するセッションは、明示的な値を入力できます。

ただし、列は依然としてID列です。セッションがID制約を無視できるということだけです。

7
Andomar

Id列の値を明示的に設定できるように、identity_insertをオンに設定します。再度割り当てて、自動割り当てを行います。

1
cf_en

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
0
Charles Burns