2011-03-03 79 views
1
CREATE TRIGGER dbo.YourTrigger 
ON a 
AFTER UPDATE 
AS 
BEGIN 
SET NOCOUNT ON; 

IF NOT UPDATE(name) 
RETURN 

UPDATE d 
set upload = 1 
FROM d 
END 

這是代碼,但它並不按照我想要的方式工作。在這種情況下,當表(a)中的每個記錄更改時,它都會從表(d)更新我的上傳字段。 我希望表(d)中的上傳字段僅在表(a)中的(名稱字段)更改時更改。在一個表格中使用觸發器並更新其他表格

+0

您使用的是什麼RDBMS? – 2011-03-03 19:22:23

+0

表a和表d之間是否有任何關係? – 2011-03-03 19:24:11

+0

忘了提及是這些表有一個主鍵和外鍵的關係 – dca 2011-03-03 19:35:45

回答

1

您使用觸發器內的特殊InsertedDeleted表,以確定哪些行已受到影響。對於更新觸發器,Deleted包含行的「之前」版本,Inserted包含行的「之後」版本。

CREATE TRIGGER dbo.YourTrigger 
ON a 
AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    IF UPDATE(name) 
     UPDATE d 
      set upload = 1 
      FROM Inserted i 
       INNER JOIN Deleted de 
        ON i.EmpId= de.EmpId 
       INNER JOIN d 
        ON i.EmpId= d.RecId 
      WHERE i.name <> de.name 
END 
+0

我對sql很新。如果你能解釋我的話。什麼是(de)和(i) – dca 2011-03-03 19:41:33

+0

'de'和'i'是'Deleted'和'Inserted'表的別名。這只是查詢查詢中表名的簡短方式。 – 2011-03-03 19:42:41

+0

謝謝,我不刪除任何表中的任何數據。它就像用戶在一個表中更改任何信息,然後第二個表中的一個字段將是1.如果數據需要在主數據庫中更新,則代表1或0以後的代表可以被刪除。我的英語不是很好。 – dca 2011-03-03 19:49:00

0

你爲什麼不去做一個小更清潔,簡單,因爲你只打算如果名稱被更新,以更新...

CREATE TRIGGER dbo.YourTrigger 
ON a 
AFTER UPDATE 
AS 
BEGIN 
SET NOCOUNT ON; 

IF UPDATE(name) 
BEGIN 
UPDATE d 
set upload = 1 
FROM d 
END 
ELSE 
BEGIN 
     --HERE GOES CODE 
END 
END 
+0

實際上,我在表(a)中有15個字段,但是如果其中三個更新,那麼表(d)上傳字段獲得值爲1的其他明智的它的0默認 – dca 2011-03-03 19:33:10

+0

我忘了提及是這些表有一個主鍵和外鍵的關係 – dca 2011-03-03 19:34:35

+0

只是添加IF更新(名稱)和更新(field2)和更新(field3)如果你需要做的事情時,該條件不起作用只是添加一個ELSE語句 – Necronet 2011-03-03 20:20:11

相關問題