2015-08-25 81 views
0

我想在完成以下任務的一些建議:SQL - 觸發刪除基於列值的行

我有三個表:

表1具有「全」欄目,和表2和3具有列的相同子集選自表1

表1 - 西1,第2欄第西3,第4欄,第5欄,欄6
表2 - 西1,第2欄第5山口
表3 - Col 1,Col 2,Col 5

我在表1中有一個觸發器,當列3 ='1'時,將列1,2和5插入表2中的後插入。

我在表1中有第二個觸發器,當Col 3 ='10'時,將列1,2和5插入到表3的AFTER INSERT中。

該系統正在跟蹤序列化零件,因此對於任何一個零件,第2列對於每個零件(序列號)都是相同的。

我需要的是,當插入記錄到表3的觸發器發生時,我想回到表2並刪除任何記錄,其中列2包含的值等於INSERT的列2中的值。

該值是一個20個字符的字符串,我無法找到一個從插入中的列中提取實際值以在SELECT或DELETE中使用的示例。

謝謝

+0

第2列的值是否爲動態...即在插入後您才知道它的值,因爲它是由像「newid()」這樣的列作爲列缺省值分配的?這就是爲什麼這是一個問題?或者是由應用程序確定的值,並因此從字面上插入爲靜態值? – pmbAustin

+0

是的,這在相對較大的製造系統中工作,一次在系統中有大約200個序列號。當它出現時,我不知道序列號是什麼。本質上,我想記錄零件何時進入並離開區域,列3 ='1'表示它剛進入區域,列3 ='10'表示它正在離開。 – jimk

+0

但是字面值插入的值,還是發送「NULL」值,因此數據庫服務器爲您生成值?在第一種情況下,這很容易,因爲你知道觸發器的價值......在後一種情況下,這很難,因爲你不知道。我還不清楚你的意思是如何填充序列號。它看起來像一個部分會有一個固定的序列號,在這種情況下,它的字面意思是插入的,所以這裏沒有問題要解決......它在插入的集合中。 – pmbAustin

回答

0

您需要爲表1的觸發器,即插入表2和3的值:

create trigger insertTrigger1 on dbo.T1 
    After Insert 
    as 
    insert into T2 select col1,col2, col5 From Inserted where col3 = 1 
    insert into T3 Select col1,col2, col5 From Inserted where col3 = 10 

和表3的觸發器,刪除表2記錄:

create trigger insertTrigger3 on dbo.T3 
After Insert 
    as 
    delete from T2 where col2 in(select col2 from Inserted) 

這是一個fiddle它。

+0

這工作,非常感謝!我不是一個數據庫傢伙(機器控制人員),我感謝你們所有的幫助我,因爲我不打算弄清楚這一點。 – jimk