SQL Server为客户自动生成myCompanyID并关联其他表如何实现
实现方案
步骤1:客户主表新增myCompanyID字段并初始化存量数据
优先推荐用自增列实现自动生成唯一ID,无需额外维护;如果有自定义ID生成规则的需求,可以用SEQUENCE实现。
-- 方案1:自增列方案(最简) ALTER TABLE 客户主表 ADD myCompanyID INT IDENTITY(1,1) NOT NULL; -- 新增唯一约束避免重复 ALTER TABLE 客户主表 ADD CONSTRAINT UQ_客户主表_myCompanyID UNIQUE (myCompanyID); -- 方案2:SEQUENCE方案(支持自定义规则) CREATE SEQUENCE SEQ_myCompanyID START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 99999999 NO CYCLE; -- 新增字段并初始化存量数据 ALTER TABLE 客户主表 ADD myCompanyID INT NULL; UPDATE 客户主表 SET myCompanyID = NEXT VALUE FOR SEQ_myCompanyID; ALTER TABLE 客户主表 ALTER COLUMN myCompanyID INT NOT NULL; -- 配置默认值实现插入自动生成 ALTER TABLE 客户主表 ADD CONSTRAINT DF_客户主表_myCompanyID DEFAULT (NEXT VALUE FOR SEQ_myCompanyID) FOR myCompanyID;
步骤2:业务表关联逻辑改造
如果其他业务表之前通过OrangeCustID和客户主表关联,按以下步骤调整:
- 给业务表新增myCompanyID字段
ALTER TABLE 对应业务表名 ADD myCompanyID INT NULL;
- 回填业务表存量数据的myCompanyID值
UPDATE b SET b.myCompanyID = c.myCompanyID FROM 对应业务表名 b INNER JOIN 客户主表 c ON b.OrangeCustID = c.OrangeCustID;
- 可选配置非空约束和外键约束保证数据一致性
-- 字段设为非空 ALTER TABLE 对应业务表名 ALTER COLUMN myCompanyID INT NOT NULL; -- 新增外键约束 ALTER TABLE 对应业务表名 ADD CONSTRAINT FK_业务表_客户主表_myCompanyID FOREIGN KEY (myCompanyID) REFERENCES 客户主表(myCompanyID);
后续使用说明
后续新客户插入时不需要手动处理myCompanyID,SQL Server会按配置自动生成;业务数据插入时直接带入对应用户的myCompanyID即可,内部查询可以直接通过myCompanyID做表关联,示例:
SELECT o.订单号,c.客户名称,o.订单金额 FROM 订单表 o INNER JOIN 客户主表 c ON o.myCompanyID = c.myCompanyID WHERE c.myCompanyID = 10086;
注意事项
- 操作前先清洗客户主表的OrangeCustID重复数据,避免回填业务表时出错
- 存量数据初始化建议在业务低峰期操作,避免锁表影响正常业务
- 所有操作建议先在测试环境验证通过后再上线生产环境
内容的提问来源于stack exchange,提问作者SMR
相关产品推荐
相关产品推荐

