我正在开发一个项目来整合数据(来自2个不同的数据库)。我创建了一个包含几列的表:
例如,当我针对原始数据源执行第一组插入时,一切都很好。
Mapping_ID: 53
ContentID: 53
ContentValue: Original Data 1
Mapping_ID: 54
ContentID: 54
ContentValue: Original Data 2
但是,当我对另一个源(我尝试合并的数据)执行第二组插入时,我希望Mapping_ID列继续到下一个数字(即55,56,57 ... )
我查看了row_number
功能,但从1开始。有没有办法在55开始?
我想我可以将Mapping_ID列设置为Identity字段,但在第一次插入时将其关闭,然后使用max值(54)将其播种,然后在第二次插入期间将其打开。
还有另一种方法可以实现这个目标吗?
答案 0 :(得分:2)
在SQL Server 2012+中,您可以使用SEQUENCE个对象来填充具有自动增量值的非标识列。另外,您可以对不同的表使用相同的SEQUENCE来进行计算传递,并从SELECT和UPDATE查询中的序列中获取值。
首先,创建SEQUENCE:
CREATE SEQUENCE SchemaName.SequenceName
START WITH 1
INCREMENT BY 1 ;
然后,在所需列上使用values from sequence创建DEFAULT约束:
ALTER TABLE tableName ADD CONSTRAINT constraint_unique_name DEFAULT NEXT VALUE FOR SchemaName.SequenceName FOR Mapping_ID;
答案 1 :(得分:1)
要让row_number()
从55开始,您只需在row_number()
计算中添加54(或任何数字):
(row_number() over (partition by Y order by X)) + 54
答案 2 :(得分:1)
从SQL Server 2012开始,实际上有一种全新的方式来执行此类操作:序列对象。对不起,我不能为你编写程序,因为我目前在MySQL世界工作,但它实现起来非常容易。基本的想法是你要维护一个单独的数据库对象,它有自己的种子和增量,但是有一些注意事项要记住它们与传统身份值的区别(例如你可以覆盖它们),所以一定要做一些研究
以下是一些可以帮助您入门的文章。如果您遇到麻烦,请回复我,我会尝试与您一起完成代码。
祝你好运!