3

2 つの同一のテーブルがI_Subjectあり、テーブルをテーブルI_Temp_Subjectにコピーしたいと考えています。単純なユーザーによって使用され、管理者によって使用されます。管理者は、新しいレコードを に直接挿入し、コンテンツを検証できます。Temp_SubjectSubjectI_Temp_SubjectI_SubjectI_SubjectI_Temp_Subject

両方のテーブル ID が自動インクリメントに設定されています。copy SQL コマンドは次のとおりです。

INSERT INTO I_SUBJECT(ID,CATEGORY_ID,USER_NAME,SERIAL_NUMBER,ICON)
SELECT ID,CATEGORY_ID,USER_NAME,SERIAL_NUMBER,ICON FROM I_TEMP_SUBJECT

それを行うと、次のエラーが発生します。

System.Data.SqlClient.SqlException: Cannot insert explicit value for identity
column in table 'I_SUBJECT' when IDENTITY_INSERT is set to OFF.

上記のステートメントに ID を含めない場合、ID が同一でないことを除いて、すべて問題ありません。

したがって、挿入前にトリガーを含めて、挿入にnull IDがあるかどうかを確認し、次に自動インクリメント(管理者が直接挿入する場合)、または挿入のIDが!=nullのI_Temp_Subject場合(管理者が検証する場合)からIDをコピーします。

4

2 に答える 2

2

バックアップ テーブルは直接コピーされるため、2 つのテーブルが常に同期されるように、そのテーブルの自動インクリメントをオフにします。それができない場合は、id の挿入をオンにしますが、不要だと思います。

SET IDENTITY_INSERT dbo.<tablename> ON
<your insert statements>
SET IDENTITY_INSERT dbo.<tablename> OFF
于 2012-11-15T08:12:12.043 に答える
1

次のステートメントを次のように使用して、自動インクリメントをオフにすることができます

SET IDENTITY_INSERT dbo.<tablename>  ON
 write your insert statement here 

次に、SET IDENTITY_INSERT dbo として ID 挿入をオフにします。オフ

すなわち

    SET IDENTITY_INSERT dbo.I_SUBJECT  ON
    INSERT INTO I_SUBJECT(ID,CATEGORY_ID,USER_NAME,SERIAL_NUMBER,ICON)
    SELECT ID,CATEGORY_ID,USER_NAME,SERIAL_NUMBER,ICON FROM I_TEMP_SUBJECT
    SET IDENTITY_INSERT dbo.I_SUBJECT OFF
于 2012-11-15T08:46:37.203 に答える