我正在尝试将表格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
答案 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()
中只有一行 - 情况并非总是如此。如果您的Inserted
或INSERT
操作影响多行,则整个语句的触发器只被称为 ,而伪表将包含多行!
您需要使用这些知识,并以完全基于集合的方式编写触发器 - 不使用任何UPDATE
样式代码!
此外,由于您在SELECT @OID = Inserted.ObjectID
案例中检查两行中的一行是否已更改,因此您无法在组合触发器中轻松执行此操作 - 我建议使用两个单独的触发器,一个对于UPDATE
,一个用于INSERT
。
试试这个:
UPDATE