2011-03-03 41 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

相关问题