数据更新复制时触发不触发

时间:2012-01-17 09:57:50

标签: sql sql-server

我在不同的服务器上有两个数据库,我已经实现了复制以在两个数据库之间同步数据。

我在订阅数据库上有一些触发器,当通过复制进行任何更改时,它们不会触发。

请为此提出解决方案。

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

1 个答案:

答案 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