问题如上,并且在网上也搜索到了这个最靠谱的答案https://www.cnblogs.com/linyijia/p/7681464.html,但第二个方法试过了,还是不能解决问题,我和文章中的环境还是有点不同,文章中的案例只是单机使用,我这里为了实现数据库同步,使用了数据库“复制”,在“订阅”数据库进行数据添加操作时,就会出现自动增长列,值跳跃问题,有时跳跃步长为1000,有时为2000,请教下,有没有遇到过这种情况的,都是怎么解决的?现在使用的是“序列”功能,思路是在表格中建立一个“序号”列,不自增,在表格中添加“触发器”,等到有数据插入时,在序号列调用“序列”当前值,实现一个自增功能,但不会编写程序段,请教大神帮忙。下面是网上找的触发器程序段:CREATE TRIGGER TRI2
   ON  [dbo].[SpeedMonitor]
FOR INSERT
AS
BEGIN
    UPDATE SpeedMonitor 
    SET 日期时间 =  getdate()  where 序号=(select Max(序号) From SpeedMonitor)                
END现在就想在插入数据时,调用“序列”当前值更新序号,不知道我说的明白不明白。

解决方案 »

  1.   

    既然用 SQL Server 2012 , 为何不直接用 alwayson 来作高可用?
    这个比复制订阅靠谱多了。即使不用 alwayson , 完全按你的思路, 也可以用 2012 的新特性: 序列
    不需要象你那样建立表
    https://blog.csdn.net/yenange/article/details/78810339USE tempdb
    GO
    IF EXISTS (SELECT * FROM sys.sequences AS s WHERE s.name='seq_Test')
    DROP sequence seq_Test
    GO
    CREATE SEQUENCE seq_Test START WITH 1 INCREMENT BY 1 ;
     
    SELECT NEXT VALUE FOR seq_Test AS r
    /*
    r
    1
    */
      

  2.   

    关于标识列的值,这在复制订阅是可配置的(没配置默认时是你所说的情况,这不是什么BUG),复制订阅单向的不会存在你说的情况,双向的如合并复制时需要配置,如果是两台机,可用奇偶数去配置种子
      

  3.   

    --关于你提到的文章,说什么BUG,那是SQL SERVER机制自动分配的https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms152543(v=sql.110),建议用手动配置
    比如:合并复制时,环境搭建好,可手动去配置,主要会用两种方法
    以两台机(A、B)为例
    以表1为例
    方法1,
    A.种子为奇数(1,3,5,.....),步长为2
    B.种子为偶数(2,4,6,...),步长为2
    -----------
    方法2,设置一下最大数,保证两台机不重复
    A.种子为(100000),步长为2
    B.种子为(200000),步长为2