为什么这个触发器总循环?

时间:2013-05-10 14:37:56

标签: sql-server triggers sql-server-2008-r2

我尝试使用触发器,当我插入表penduduk,然后在表muda也将插入,实际上这个触发器是工作,但这个触发器成为循环,当我插入(123)在penduduk,然后再次插入(1234 )然后结果将是(123,1234,123,1234),我是否正确使用'来自penduduk'?或者我应该使用'FROM inserted'?因为当我使用FROM插入时没有结果 我这样的查询

CREATE TRIGGER auto_muda
ON penduduk
FOR INSERT
AS
INSERT INTO muda (noktp,tgl_lahir)
SELECT noktp, tgl_lahir FROM penduduk
WHERE umur < 27

2 个答案:

答案 0 :(得分:3)

您目前正在抓取penduduk的所有匹配行,而不是inserted逻辑表。您可以将触发器更改为以下内容:

CREATE TRIGGER auto_muda
ON penduduk
FOR INSERT
AS
INSERT INTO muda (noktp,tgl_lahir)
SELECT noktp, tgl_lahir FROM inserted -- Use inserted, not the base table
WHERE umur < 27

来自MSDN

  

DML触发器使用已删除和插入的逻辑(概念)表。它们在结构上类似于定义触发器的表,即尝试用户操作的表。已删除和已插入的表包含可由用户操作更改的行的旧值或新值。

答案 1 :(得分:0)

使用

Select noktb, tgl_lahir from inserted

如果您对基于新插入的数据进行插入感兴趣。您的选择似乎能够返回许多项目,这解释了“循环”/重复。