SQL 服务器触发器:更新后删除的表为空

问题描述 投票:0回答:1

我有一个数据库 A、表 t,并通过事务复制到数据库 B 表 t

B.t 上有一个触发器

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER TRIGGER [dbo].[synchro_trigger]
ON [dbo].[t]
FOR INSERT, UPDATE
AS
BEGIN
    -- update case
    IF EXISTS ( SELECT 0 FROM Deleted )
...

在 A.t 上运行更新时:

update A.t set field1='1' where id=?

复制该值,然后调用触发器并且

SELECT 0 FROM Deleted
存在; 触发器完成其工作。

更新表 t 上的所有字段时(有些获得不同的值,有些获得相同的值)

update A.t set field1='1', field2='1', ... where id=?

复制值(不同),然后调用触发器,但是

SELECT 0 FROM Deleted
不存在。

所以触发器什么也不做,这不是我想要的。

如果更新,前一行值应该位于“已删除”内,对吗? 触发器怎么可能没有收到删除表内的先前值?

注意: 它看起来与以下问题相同:带有空 DELETED 逻辑表的 SQLServer 更新触发器

sql-server triggers
1个回答
0
投票

mssql 2014之后出现问题,但我找不到解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.