如何在插入和更新时使用触发器?

时间:2015-07-30 02:28:55

标签: sql-server triggers ssis

我有一个触发器,当update/insertINSERT发生时,我试图将UPDATE数据传到一个特定列。问题似乎只适用于UPDATE ...

这是我写过的第一个触发器,我无法弄明白。任何人都可以帮助我解决我的错误吗?

这是触发器:

CREATE TRIGGER [dbo].[TEST_TRIGGER]
    ON  [dbo].[TEST_TABLE] 
    AFTER INSERT,UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    UPDATE [dbo].TEST_TABLE
    SET HASH_VALUE = HASHBYTES('md5', 
        CAST(ISNULL([COL_1], -1) as nvarchar(255)) 
        + CAST(ISNULL([COL_2], -1) as nvarchar(255)) 
        + CAST(ISNULL([COL_3], -1) as nvarchar(255)) 
        + CAST(ISNULL([COL_4], -1) as nvarchar(255))
    )
    WHERE ID IN (SELECT ID FROM inserted)

END
GO

1 个答案:

答案 0 :(得分:1)

我能够弄明白......

我当时并不认为它是相关的,但事实证明我错了。我最初的问题是我通过SSIS INSERT数据。显然,我需要在OLE DB Destination中设置一个属性来解雇我的TRIGGERS

我这样做的方式是从here找到的。

对我来说,它并没有完全切断和干燥,所以这里总结了需要做的事情:

  1. 右键点击OLE DB Destination> Show Advanced Editor
  2. 选择Component Properties标签
  3. Access Mode设为OpenRowset Using FastLoad
  4. FIRE_TRIGGERS
  5. 中添加FastLoadOptions