2010-07-05 149 views
1

我正试图在SQL Server 2008上创建触发器。我希望如果我更新表格中的新值更新字段在另一个表Doc中的字段。这是触发代码:更新触发器插入为空

Create TRIGGER dbo.DocSt 
    ON dbo.log 
    AFTER UPDATE 
IF (SELECT COUNT(*) FROM inserted) > 0 
    BEGIN 
     IF (SELECT COUNT(*) FROM deleted) > 0 
     BEGIN 
      UPDATE [dbo].[Doc] 
    SET 
     [ID_user] = (select ID_user from inserted) 
WHERE 
IDN= (select id_doc from inserted) 
     END 
     END 

当我更新表日志TRIGER更新表督场,但它插入NULL。 我做错了什么?谢谢!

回答

1

这段代码不会工作 - 你的UPDATE语句中会发生什么更新10行?这是什么选择给你:

SET [ID_user] = (select ID_user from inserted) 

你试图单个值设置为一个整体回报率从SELECT语句设置 - 这是行不通的,很明显。

您需要创建一个与Inserted伪表连接UPDATE语句:

CREATE TRIGGER dbo.DocSt 
    ON dbo.log AFTER UPDATE 

    UPDATE [dbo].[Doc] 
    FROM Inserted i 
    SET [ID_user] = i.ID_User 
    WHERE IDN = i.id_doc 

这样一来,在Inserted每个条目,要加入你的表dbo.Doc它和更新ID_user列。