【问题标题】:Update trigger insert Null更新触发器插入 Null
【发布时间】:2010-07-05 18:24:21
【问题描述】:

我正在尝试在 SQL Server 2008 上创建触发器。我希望如果我更新表日志中的字段,那么新值会更新另一个表文档中的字段。这是触发器的代码:

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 

当我更新表日志中的字段时,触发更新表文档,但它插入 NULL。 我做错了什么?谢谢!

【问题讨论】:

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


    【解决方案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 列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多