2012-11-15 164 views
3

我有两个相同的表,I_SubjectI_Temp_Subject,我想复制Temp_Subject表到Subject表。简单用户使用I_Temp_Subject,管理员使用I_Subject。管理员可以直接插入新记录到I_Subject并验证I_Temp_Subject的内容。之前插入触发SQL

这两个表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(当管理员验证)。

+0

马哈茂德·请编辑在编辑正确 – Sohail

+0

我没有发现太大的区别。编辑之前也很好 – Sohail

+0

@Sohail - 你认为目前的编辑? –

回答

1

您可以用下面的语句作为

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

关闭自动increament然后关闭标识插入作为 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 
+0

这个伎俩!非常感谢你! – Rale

2

由于备份表是直接复制,因此我会关闭该自动增量,以便两者始终保持同步。 如果没有选项,打开身份插入,但我认为这是没有必要的。

SET IDENTITY_INSERT dbo.<tablename> ON 
<your insert statements> 
SET IDENTITY_INSERT dbo.<tablename> OFF