在插入触发器 SQL 之前

3
我有两个相同的表,I_SubjectI_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,然后自动增加(当管理员直接插入时),否则,如果插入的ID!= null,则从I_Temp_Subject复制ID(当管理员验证时)。


马赫茂德,请适当编辑。 - Sohail
我没有发现你的编辑有太大的区别。在编辑之前也很好。 - Sohail
@Sohail - 你认为当前的编辑怎么样? - Mahmoud Gamal
2个回答

2

由于备份表需要直接复制,我会关闭该表的自动增量,以便两个表始终保持同步。如果不行,可以开启标识插入,但我认为这是不必要的。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接