我在不同的服务器上有两个数据库,我已经实现了复制以在两个数据库之间同步数据。
我在订阅数据库上有一些触发器,当通过复制进行任何更改时,它们不会触发。
请为此提出解决方案。
Create TRIGGER [dbo].[Ins_SLab]
ON [dbo].[Slab]
AFTER Insert
AS
BEGIN
Declare @ProductId int
set @ProductId =(select PurchaseProductID from Inserted)
set @ProductId =(select ProductID from dbo.PurchaseProduct where ID = @ProductId)
insert into tblTestTriger values('Hold Product Update',@ProductId)
End
Go
答案 0 :(得分:4)
好吧,你不指定了NOT FOR REPLICATION
选项,这是最明显的原因。
但第二个最明显的原因是触发器可能是触发。但是因为你已经编写了触发器来假设它只适用于一行,所以它只适用于每批复制行中的一行。
相反,你需要的是将inserted
视为一个表,并重新编写你的触发器以保持所有基于集合的 - 如果你分配变量,那你做错了。
insert into tblTestTriger --TODO: Explicit column list
select 'Hold Product Update',pp.ProductId
from inserted i
inner join
dbo.PurchaseProduct pp
on i.PurchaseProduct = pp.ID