20

列の Is Identity プロパティをオフに設定し、明示的な値を挿入して再度オンに設定したい.私はこのクエリを書きました:

SET IDENTITY_INSERT Tbl_Cartoons OFF

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

4

6 に答える 6

40

SET IDENTITY_INSERT Tbl_Cartoons ON明示的な値を挿入しようとする前に、実際に使用したいと考えています。

あなたは、「列に値を挿入する責任がある」と言っています。IDENTITY

SET IDENTITY_INSERT Tbl_Cartoons OFF「列に値を挿入する責任をシステムに負わせます」と言いますIDENTITY

于 2013-02-25T11:00:19.957 に答える
25

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

SET IDENTITY_INSERT Tbl_Cartoons  ON
GO

-- code to insert explicit ID values

SET IDENTITY_INSERT Tbl_Cartoons  OFF
GO
于 2013-02-25T11:13:34.450 に答える
10

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

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

于 2013-02-25T10:54:33.877 に答える
7

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

ただし、列は ID 列のままです。セッションがアイデンティティ制約を無視できるというだけです。

于 2013-02-25T10:54:44.267 に答える
1

id 列の値を明示的に設定できるようにするには、identity_insert を on に設定します。自動割り当てするには、もう一度オフに設定します。

于 2013-02-25T10:55:21.580 に答える
0

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
于 2016-03-13T04:00:08.257 に答える