如何让触发器在插入和更新时起作用?
How to have a trigger work on insert and update?
我有一个触发器,当 INSERT
或 UPDATE
发生时,我试图将 update/insert
数据发送到一个特定的列。问题它似乎只适用于 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
我想通了...
当时我不认为它是相关的,但事实证明我错了。我最初的问题是我 INSERT
通过 SSIS 传输数据。显然我需要在我的 OLE DB Destination
中设置一个 属性 来触发我的 TRIGGERS
.
我这样做的方法是从 here.
中找到的
这对我来说并不完全是干的,所以这里是需要做的事情的总结:
- 右键单击
OLE DB Destination
> Show Advanced Editor
- Select
Component Properties
选项卡
- 将
Access Mode
设置为OpenRowset Using FastLoad
- 在
FastLoadOptions
中添加FIRE_TRIGGERS
我有一个触发器,当 INSERT
或 UPDATE
发生时,我试图将 update/insert
数据发送到一个特定的列。问题它似乎只适用于 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
我想通了...
当时我不认为它是相关的,但事实证明我错了。我最初的问题是我 INSERT
通过 SSIS 传输数据。显然我需要在我的 OLE DB Destination
中设置一个 属性 来触发我的 TRIGGERS
.
我这样做的方法是从 here.
中找到的这对我来说并不完全是干的,所以这里是需要做的事情的总结:
- 右键单击
OLE DB Destination
>Show Advanced Editor
- Select
Component Properties
选项卡 - 将
Access Mode
设置为OpenRowset Using FastLoad
- 在
FastLoadOptions
中添加
FIRE_TRIGGERS