【发布时间】:2020-01-05 14:48:27
【问题描述】:
我使用 MS SQL Server Management Studio 2017。我有一个触发器 (trigg_1),它插入另一个表 (table_2) 中的 table_1 列 col_1(表 table_2 的 FK)值. Trigg_1 在我插入一些值时起作用,trigg_1 在col_1 中插入值。现在,我需要另一个触发器trigg_2,它不会让我更改 col_1。如果我禁用trigg_1,trigg_2 可以工作。
CREATE TRIGGER [dbo].[trigg_1]
ON [dbo].[table_1]
AFTER INSERT
AS
BEGIN
update table_1
set col_1=(select col_2 from table_2 where table_1.IDc1=table_2.IDc2);
END
这可行,但是当我想在 EDIT TOP 200 ROWS 中更改值(现在不为空,因为trigg_1 插入值)col_1,我需要trigg_2。
【问题讨论】:
-
触发器正在为每次插入更新表中的所有行,因为您没有加入虚拟
inserted表。 -
您是否需要trigg_2,当您尝试更改table_1.col_1 中的某些值时它会起作用?触发器而不是更新呢?此外,您可以使用 AFTER UPDATE 触发器并用表
deleted中的旧值替换新值。 -
我想我会使用最后一个选项。我是这样做的,但我可能需要触发器。感谢您的建议
标签: sql sql-server database triggers