2012-11-15 46 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