代码之家  ›  专栏  ›  技术社区  ›  Damien

SQL 2005触发器无法可靠触发

  •  0
  • Damien  · 技术社区  · 16 年前

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[MyTable_InsertTrigger] 
        ON [dbo].[MyTable] 
        AFTER INSERT 
    AS 
    BEGIN 
        SET NOCOUNT ON 
        UPDATE [dbo].[MyTable] 
        SET [CreationDate] = GETUTCDATE() 
        FROM inserted 
        WHERE inserted.[DataDate] = [dbo].[MyTable].[DataDate] 
    END;
    
    3 回复  |  直到 16 年前
        1
  •  1
  •   Ice    16 年前

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[MyTable_InsertTrigger] 
        ON [dbo].[MyTable] 
        AFTER INSERT 
    AS 
    BEGIN 
        SET NOCOUNT ON 
        UPDATE [dbo].[MyTable] 
        SET [CreationDate] = GETUTCDATE() 
        FROM inserted, MyTable 
        WHERE inserted.[DataDate] = [dbo].[MyTable].[DataDate] 
    END;
    

    这是因为虚拟表INSERTED中可以有多行,因此必须将其正确连接到表[MyTable];并使用唯一键进行连接,因此请查看比[DataDate]更好的选择(假设这是[datetime]类型)。

        2
  •  1
  •   Ed Harper    16 年前

    [inserted].[DataDate] [dbo].[MyTable].[DataDate] 或者插入时触发器被禁用。

    这是一个简化的例子来说明你的问题吗?如果没有,你真的不需要触发器来设置 CreationDate

    ALTER TABLE dbo.MyTable ADD CONSTRAINT Df_MyTable_CreationDate DEFAULT GETUTCDATE() FOR CreationDate
    

        3
  •  0
  •   A-K    16 年前