MS SQL-Server 2012同一服务器不同库两表生成唯一int ID方案咨询
跨SQL Server 2012同实例多库表全局唯一int ID生成与双向同步方案
一、跨库全局唯一int ID实现方案
方案1:跨库调用全局序列(最优方案,性能最高)
你之前遇到sequence无法跨库使用的问题,大概率是没有使用全限定名调用序列。SQL Server的序列支持跨库访问,只要调用方有对应序列的权限即可,具体实现步骤:
- 选择一个公共库(可以用现有公共库,或单独创建配置库,也可直接用master库)创建序列:
USE [CommonConfig] GO CREATE SEQUENCE dbo.GlobalUniqueIntID AS INT START WITH 1 INCREMENT BY 1 NO CYCLE -- 避免ID重复,根据业务需求决定是否开启循环 GO
- 两个库的表插入数据时,直接调用全限定名的序列生成ID即可:
-- 库A的表插入示例 USE [DB_A] GO INSERT INTO dbo.TableA (ID, Field1, Field2) VALUES (NEXT VALUE FOR [CommonConfig].dbo.GlobalUniqueIntID, 'val1', 'val2')
-- 库B的表插入示例 USE [DB_B] GO INSERT INTO dbo.TableB (ID, Field1, Field2) VALUES (NEXT VALUE FOR [CommonConfig].dbo.GlobalUniqueIntID, 'val1', 'val2')
方案2:标识列区间分配(无额外依赖,适合业务规模固定的场景)
给两个表的自增标识列设置不同的起始值和步长,从根源避免ID重叠:
- 库A的表ID列设置为
IDENTITY(1,2),仅生成1、3、5...等奇数ID - 库B的表ID列设置为
IDENTITY(2,2),仅生成2、4、6...等偶数ID
该方案无需额外配置,插入逻辑无改动,缺点是后续新增表需要重新调整区间规则,扩容性较差。
方案3:全局ID生成映射表(适合低并发场景)
在公共库创建专门的ID生成表,每次插入业务数据前先从该表获取唯一ID:
-- 公共库创建ID生成表 CREATE TABLE CommonConfig.dbo.IDPool ( ID INT IDENTITY(1,1) PRIMARY KEY, CreateTime DATETIME DEFAULT GETDATE() )
插入业务数据前先往IDPool插入一条空记录,用SCOPE_IDENTITY()返回的ID作为业务表的主键即可,缺点是高并发场景下会有性能瓶颈。
二、两表定期双向更新实现方案
方案1:SQL Server代理作业 + MERGE语句(推荐定期同步场景)
通过定时作业执行同步逻辑,同时通过更新时间戳字段避免循环同步,具体步骤:
- 两张表都新增
LastUpdateTime字段,默认值为GETDATE(),每次数据更新时同步更新该字段 - 编写同步存储过程,示例A库到B库的同步逻辑:
MERGE DB_B.dbo.TableB AS Target USING DB_A.dbo.TableA AS Source ON Target.ID = Source.ID -- 仅同步源表更新时间晚于目标表的记录,避免覆盖新数据和循环同步 WHEN MATCHED AND Target.LastUpdateTime < Source.LastUpdateTime THEN UPDATE SET Target.Field1 = Source.Field1, Target.Field2 = Source.Field2, Target.LastUpdateTime = Source.LastUpdateTime WHEN NOT MATCHED BY TARGET THEN INSERT (ID, Field1, Field2, LastUpdateTime) VALUES (Source.ID, Source.Field1, Source.Field2, Source.LastUpdateTime);
- 按照同样逻辑编写B库到A库的同步存储过程,创建SQL Server代理作业,按你需要的同步频率定时执行两个存储过程即可,两个同步任务建议错开1-2分钟执行,避免资源冲突。
方案2:触发器实时同步(适合近实时同步场景)
分别在两张表上创建INSERT/UPDATE触发器,数据变更时实时同步到另一库的对应表,注意增加同步标记判断避免死循环,比如同步时设置上下文标记,触发器检测到标记时不触发二次同步。
内容的提问来源于stack exchange,提问作者Jörgen R
相关产品推荐
相关产品推荐

