【发布时间】:2018-01-18 09:19:06
【问题描述】:
每当 table2 上有新条目时,我都需要从 table2.field2 更新 table1.field1。我创建了一个可以做到这一点的触发器:
CREATE [dbo].[insert_trg]
on [dbo].[TheCat99]
AFTER INSERT AS
BEGIN
Update therefore.dbo.thecat99
SET factura = (SELECT dbo.pedido.num_factura
From dbo.Pedido
Where dbo.thecat99.pedido=dbo.pedido.num_pedido)
WHERE dbo.thecat99.pedido = ( SELECT dbo.pedido.num_pedido
FROM dbo.pedido
Where dbo.thecat99.pedido = dbo.pedido.Num_Pedido)
AND dbo.thecat99.factura is NULL
END
触发器有效,但尚未投入生产。我一直在阅读有关触发器如何坏和坏的信息,但我不知道如何使用存储过程来做到这一点。 触发器是个好主意吗?如果没有,我怎样才能对存储过程做同样的事情?
【问题讨论】:
-
你从哪里读到触发器是坏的和邪恶的,你有参考吗?使用过程,您需要将这两个动作都封装在过程中,并确保没有人在过程之外修改 table2。
-
触发器本质上并不邪恶。 忽略
inserted伪表(如此处)或未能说明包含 0、1 或多行的表的触发器通常会被破坏。当前,您的触发器中没有任何内容可以阻止它在每次插入期间必须扫描两个表的整体,而不是仅受插入的行的限制。
标签: sql sql-server triggers procedure