我有一个触发器,当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
我终于明白了…
我当时不认为这是相关的,但事实证明我错了。我最初的问题是,我是通过SSIS INSERT
数据。显然,我需要在我的OLE DB Destination
中设置一个属性来触发我的TRIGGERS
。
我做这件事的方法是从这里找到的。
对我来说,这并不是一成不变的,所以这里是需要做的总结:
- 右击
OLE DB Destination
>Show Advanced Editor
- 选择
Component Properties
标签 - 设置
Access Mode
为OpenRowset Using FastLoad
- 在
FastLoadOptions
中添加
FIRE_TRIGGERS