我有2个数据库,我想与一些类似的表合并。源表的id为bigint,目标表的int为ID。我的源表(< 20k)中没有很多记录,因此我想为所有记录分配新的ID,以便id可以放入int中。我怎么能用sql做这个?
答案 0 :(得分:1)
第一个选项
您可以按如下方式使用Sequence对象:
首先创建一个Sequence对象并将其分配给目标表中的Max Id值加1开始。例如,如果目标表中的max Id为100,则需要将101指定为Start With。您还可以使用Max(Id)聚合函数从目标表中获取max Id值,并将其存储在变量中:
CREATE SEQUENCE SeqId
START WITH [Max value of Id in destination table]
INCREMENT BY 1 ;
GO
然后使用以下查询插入目标表:
Insert Into tblXXX (Id, ...) Values (NEXT VALUE FOR SeqId, ...)
Read more about Sequence Object
第二个选项
您可以将目标表的Id列作为标识列,其种子等于目标表的Id列最大值,而Increment等于1。 Here is detailed example也Here
答案 1 :(得分:1)
您没有提供太多详细信息,因此我只能提供一般指导原则:
注意:示例假定您要将表A和B合并到C中,并且您希望生成新ID。我还假设这些ID不被其他表(外键)引用。
首先从表A和B获得记录计数:
DECLARE @countA INT
DECLARE @countB INT
SET @countA = ( SELECT COUNT(*) FROM A )
SET @countB = ( SELECT COUNT(*) FROM B )
接下来,您使用窗口函数生成新ID并将记录插入表C。
INSERT INTO C
SELECT @countA + ROW_NUMBER() OVER( ORDER BY ID ) AS ID, ....
FROM A
INSERT INTO C
SELECT @countA + @countB + ROW_NUMBER() OVER( ORDER BY ID ) AS ID, ....
FROM B