在SQL Trigger上包含Where语句

时间:2012-08-02 14:03:40

标签: sql triggers where-clause

我是编写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

关于如何做到这一点的任何建议?

3 个答案:

答案 0 :(得分:1)

触发器将始终触发。

您需要在insert / select语句中放置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%'

答案 1 :(得分:1)

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

即可
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%'

触发器将始终触发,但只插入符合条件的行。

这很重要,因为对于批量插入,触发器可能会同时触发多行,因此您将无法有选择地运行它。

答案 2 :(得分:0)

Trigger中的语句可以有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%'