3

我有两个相同的表,I_Subject并且I_Temp_Subject我想将表复制到Temp_SubjectSubject中。I_Temp_Subject由简单用户I_Subject使用并由管理员使用。管理员可以直接将新记录插入I_Subject并验证I_Temp_Subject.

两个表 ID 都设置为自动递增。复制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 不相同。

所以我想包含一个插入前触发器来检查插入是否具有空 ID,然后自动递增(当管理员直接插入时),否则如果插入的 ID != null 然后从I_Temp_Subject(当管理员验证时)复制 ID。

4

2 回答 2

2

由于备份表是直接副本,因此我会关闭该表的自动增量,以便两者始终保持同步。如果那不是选项,请打开身份插入,尽管我认为这是不必要的。

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。离开

IE

    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 回答