我是编写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
关于如何做到这一点的任何建议?
答案 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%'