1

我对编写 SQL 触发器还是很陌生,现在我已经根据需要工作了一段时间,但是现在我想向触发器添加一个 where 子句,以便它仅在满足特定条件时触发。

在这种特殊情况下,我想检查一下是否ContextDN like '%FA 2012%'有,如果有,然后触发触发器。这是我当前的触发器:

CREATE TRIGGER [dbo].[setAsMoodle]
ON [dbo].[LMS_Section]
For Insert
As
INSERT INTO [dbo].[CUS_LmsSection_LmsProxy] (LMSSectionID, LMSProxyID, LMSSectionCtxDN)
select  SectionID , 'DEE76E47-25E6-459B-9D38-1BCAFA44077A', ContextDN from inserted

有关如何执行此操作的任何建议?

4

3 回答 3

2

只需将 where 放在插入语句的末尾

USE ICS_NET; 

GO 
CREATE TRIGGER [dbo].[setAsMoodle] 
ON [dbo].[LMS_Section] 
For Insert 
As 
INSERT INTO [dbo].[CUS_LmsSection_LmsProxy] (LMSSectionID, LMSProxyID, LMSSectionCtxDN) 
select  SectionID , 'DEE76E47-25E6-459B-9D38-1BCAFA44077A', ContextDN from inserted
where ContextDN like '%FA 2012%'

触发器将始终触发,但仅插入与条件匹配的行。

这很重要,因为触发器可能会一次触发多行以进行批量插入,因此您将无法有选择地运行它。

于 2012-08-02T14:06:35.353 回答
1

触发器将始终触发。

您需要将 where 子句放在插入/选择语句中

INSERT INTO [dbo].[CUS_LmsSection_LmsProxy] (LMSSectionID, LMSProxyID, LMSSectionCtxDN) 
select  SectionID , 'DEE76E47-25E6-459B-9D38-1BCAFA44077A', ContextDN from inserted 
where ContextDN like '%FA 2012%'
于 2012-08-02T14:05:49.393 回答
0

触发器中的语句可以有WHERE子句,因此您只需将WHERE子句添加到语句中。

USE ICS_NET;

GO
CREATE TRIGGER [dbo].[setAsMoodle]
ON [dbo].[LMS_Section]
For Insert
As
INSERT INTO [dbo].[CUS_LmsSection_LmsProxy] (LMSSectionID, LMSProxyID, LMSSectionCtxDN)
select  SectionID , 'DEE76E47-25E6-459B-9D38-1BCAFA44077A', ContextDN 
from inserted
WHERE 'ContextDN' like '%FA 2012%'
于 2012-08-02T14:06:43.827 回答