更新触发器插入Null

时间:2010-07-05 10:18:48

标签: sql sql-server tsql sql-server-2008

我正在尝试在SQL Server 2008上创建触发器。我希望如果我在tabele日志中更新另一个表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更新表Doc中的字段但是它插入NULL。 我做错了什么?谢谢!

1 个答案:

答案 0 :(得分: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列。