SQL SERVER2012自动增长列,值跳跃问题(自增增加1000)

lzf740308 2018-09-03 09:04:27
问题如上,并且在网上也搜索到了这个最靠谱的答案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

现在就想在插入数据时,调用“序列”当前值更新序号,不知道我说的明白不明白。
...全文
784 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2018-09-05
  • 打赏
  • 举报
回复
--关于你提到的文章,说什么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
中国风 2018-09-04
  • 打赏
  • 举报
回复
关于标识列的值,这在复制订阅是可配置的(没配置默认时是你所说的情况,这不是什么BUG),复制订阅单向的不会存在你说的情况,双向的如合并复制时需要配置,如果是两台机,可用奇偶数去配置种子
吉普赛的歌 版主 2018-09-04
  • 打赏
  • 举报
回复
既然用 SQL Server 2012 , 为何不直接用 alwayson 来作高可用?
这个比复制订阅靠谱多了。

即使不用 alwayson , 完全按你的思路, 也可以用 2012 的新特性: 序列
不需要象你那样建立表
https://blog.csdn.net/yenange/article/details/78810339

USE 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
*/


lzf740308 2018-09-04
  • 打赏
  • 举报
回复
引用 2 楼 roy_88 的回复:
关于标识列的值,这在复制订阅是可配置的(没配置默认时是你所说的情况,这不是什么BUG),复制订阅单向的不会存在你说的情况,双向的如合并复制时需要配置,如果是两台机,可用奇偶数去配置种子


可以说的具体些吗?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧