我有两个相同的表I_Subject
和I_Temp_Subject
,我想将Temp_Subject
表复制到Subject
表。简单用户使用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不相同外,一切正常。
所以我想要包含一个before insert触发器来检查插入是否有空ID然后自动增量(当Admin直接插入时)else如果插入的ID!= null则从I_Temp_Subject
复制ID(当管理员验证)。
答案 0 :(得分:2)
由于备份表是直接复制,我会关闭该备份表的自动增量,以便两者始终保持同步。 如果不是这个选项,请打开身份插入,但我认为这是不必要的。
SET IDENTITY_INSERT dbo.<tablename> ON
<your insert statements>
SET IDENTITY_INSERT dbo.<tablename> OFF
答案 1 :(得分:1)
您可以使用以下语句作为
关闭自动增量SET IDENTITY_INSERT dbo.<tablename> ON
write your insert statement here
然后关闭标识插入为SET IDENTITY_INSERT dbo。 OFF
即
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