[sql server发布订阅]after触发器执行失败造成复制不成功

结论:
(以插入而例)

  • 发布端的数据插入成功
  • 订阅段的数据不会插入

实验

创建一张新表

create table test_subscriber (id int, mark varchar(2),inserttime datetime)

在订阅表上创建触发器

CREATE TRIGGER [dbo].[sf_test]
   ON  [dbo].[t2]
   AFTER INSERT
AS 
BEGIN
    
    SET NOCOUNT ON;

    insert into test_subscriber
    select c1,c2,getdate() from inserted

	
END

GO

在发布端执行满足条件的插入

如果C2的字段长度<=2,则触发器能够执行成功,那么两端的数据都能得到更新。

insert into t2 values (5,'xx')

订阅端(和发布端一致)

1> select * from t2 where c1=5
2> go
c1          c2
----------- -----------------------
          5 xx

(1 行受影响)
1> select * from test_subscriber
2> go
id          mark inserttime
----------- ---- -----------------------
          5 xx   2015-07-06 22:39:37.227

(1 行受影响)

插入使触发器执行失败的数据

insert into t2 values (6,'3xx')

发布端

1> use sql2008sbs
2> select * from t2 where c1=6
3> go
已将数据库上下文更改为 'sql2008sbs'。
c1          c2
----------- ----------------------------
          6 3xx

(1 行受影响)

订阅端


1> select * from t2 where c1=6
2> go
c1          c2
----------- ------------------------

(0 行受影响)

记录表

1> select * from test_subscriber where id=6
2> go
id          mark inserttime
----------- ---- -----------------------

(0 行受影响)
原文地址:https://www.cnblogs.com/shenfeng/p/sqlserver_subscribe_trigger_fail.html