2012-12-04 41 views
0

我有以下的簡化模型DB:在SQL Server 2008 DELETE觸發影響超過預期行

enter image description here

有有工作計劃。作業包含位置的目標,但它們並未與表格Location明確關聯。

我有一個ON DELETE觸發器爲表Location。我想要觸發器將作業的objectid重置爲-1。

update dbo.Job 
set objectid = -1, lat = -1, lng = -1, location = null 
from 
    (dbo.[Plan] as p 
    inner join dbo.Job as j on (p.planid = j.planid 
           and p.userid in (select user_id from deleted))) 
    inner join deleted as d on j.objectid = d.objectid 

我的問題:

這觸發復位所有匹配的ObjectID,即使作業屬於不同的aspnet_Users。我如何才能做到只有相應的aspnet_User的作業受觸發器影響?

回答

1

我認爲你需要同時使用objectiduserid列與連接,而不是IN運算符。

另外,我不明白爲什麼aspnet_Users應補充:

update 
     dbo.Job 
set 
     objectid = -1, lat = -1, lng = -1, location = null 
from 
     dbo.Job as j 
    join 
     dbo.Plan as p on p.planid = j.planid 
    join 
     deleted as d on d.objectid = j.objectid 
         and d.user_id = p.userid ; 
+0

OBJECTID是不是主鍵,讓不同的用戶將具有相同OBJECTID不同的位置 - 的ObjectID是唯一隻針對同一用戶。我的觸發器的問題是,受影響的不同用戶的位置。 – curiosity