Sql server 仅当值为FALSE时运行触发器
经过反复试验,在您的帮助下,我为我的触发器编写了以下代码:Sql server 仅当值为FALSE时运行触发器,sql-server,Sql Server,经过反复试验,在您的帮助下,我为我的触发器编写了以下代码: ALTER TRIGGER [dbo].[SnapChapas] ON [dbo].[Tab_Inventarios_Chapas] AFTER UPDATE AS BEGIN SET NOCOUNT ON; IF UPDATE(Ativo) DECLARE @IDInventario as INT SET @IDInventario = (SELECT ID FROM insert
ALTER TRIGGER [dbo].[SnapChapas]
ON [dbo].[Tab_Inventarios_Chapas]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(Ativo)
DECLARE @IDInventario as INT
SET @IDInventario = (SELECT ID FROM inserted)
INSERT
INTO Tab_Inventarios_Chapas_Snap_Banco
( ID_Tab_Chapas,
FormatoL,
Comprimento1,
Comprimento2,
Largura1,
Largura2,
Quantidade,
ID_Tab_Inventarios_Chapas
)
SELECT ID,
FormatoL,
Comprimento1,
Comprimento2,
Largura1,
Largura2,
Quantidade,
@IDInventario
FROM Tab_Chapas
上面的代码正在运行。我的问题是:我在[dbo].[Tab\u Inventarios\u Chapas]
中有一个名为“ACTIVE”的列。我只需要在更新值为FALSE
时运行触发器
注意:我的申请一次只更新一行;无法更新多个版本。多亏了@jeroenmoster,我才能找到答案
这是我的最终代码:
ALTER TRIGGER [dbo].[SnapChapas]
ON [dbo].[Tab_Inventarios_Chapas]
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Declare @ativo as bit
Set @ativo = (select Ativo from inserted)
if UPDATE(Ativo) and @ativo='False'
declare @IDInventario as int
Set @IDInventario = (select ID from inserted)
insert into Tab_Inventarios_Chapas_Snap_Banco (ID_Tab_Chapas,FormatoL,Comprimento1,Comprimento2,Largura1,Largura2,Quantidade,ID_Tab_Inventarios_Chapas)
select ID,FormatoL,Comprimento1,Comprimento2,Largura1,Largura2,Quantidade,@IDInventario
from Tab_Chapas
END
谢谢大家! “有人能帮我扳机吗?”这不是我们能回答的问题;这只是一个简单的“是”或“不是”的答案,实际上对你没有帮助。相反,请向我们展示您迄今为止所写的内容,并解释它不起作用的原因。给我们一些示例数据(如DDL和DML语句)和预期结果,这样我们就可以了解您的工作方向。然后我们解释你的尝试失败的原因,让你回到正确的道路上。我同意@Larnu尝试从样本表中发布至少一个样本,如果你不想发布私人内容,则触发。否则,只有当有人能够与myreries和wondersome powers合作,并且这些人通常不会在StackOverflow周围闲逛时,才能提供帮助:-(大家好,为问题的糟糕方式感到抱歉…尝试做得更好:更改了问题对涉及的行的当前/以前版本使用插入的和删除的伪表,并且您可以使用IF UPDATE(Active)
测试该列是否参与更新(但不是实际的变化;因此你需要加入表格)。@Jeroenmoster,谢谢你的帮助,我会尝试改变然后回来