SQL Server触发器用于插入或更新

时间:2016-04-04 21:34:49

标签: sql-server gis

我正在尝试将表格EditingField_Poly和列Send_Email从“是”编辑为“否”。它不允许我保存编辑...当我禁用触发器时,它让我保存。此触发器应该查看是否有新的插入或更新了这两列 - 如果有,那么它会将Send_Email列中的状态从“否”更改为“是”

有人可以帮我解决这个触发器的错误吗?

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[Send_Email]
ON [dbo].[EDITINGFIELD_POLY]
FOR UPDATE, INSERT
AS
    IF (UPDATE([Status]) or UPDATE([Department]))
    BEGIN
          SET NOCOUNT ON;

          DECLARE @OID int;
          SELECT @OID = i.OBJECTID from inserted i;

          UPDATE [dbo].[EDITINGFIELD_POLY] 
          SET Send_Email = 'Yes' 
          WHERE OBJECTID = @OID            
END
GO

1 个答案:

答案 0 :(得分:1)

您的触发器严重缺陷因为它假定import turtle def draw_square(): window = turtle.Screen() window.bgcolor("red") brad = turtle.Turtle() brad.shape("turtle") brad.color("yellow") brad.speed(2) brad.forward(100) brad.right(90) window.exitonclick() draw_square() 中只有一行 - 情况并非总是如此。如果您的InsertedINSERT操作影响多行,则整个语句的触发器只被称为 ,而伪表将包含多行

您需要使用这些知识,并以完全基于集合的方式编写触发器 - 不使用任何UPDATE样式代码!

此外,由于您在SELECT @OID = Inserted.ObjectID案例中检查两行中的一行是否已更改,因此您无法在组合触发器中轻松执行此操作 - 我建议使用两个单独的触发器,一个对于UPDATE,一个用于INSERT

试试这个:

UPDATE