我有一个数据库 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 更新触发器
mssql 2014之后出现问题,但我找不到解决方案。