我有两个数据库,我想与一些相似的表合并。源表以ID作为bigint,我的目标表以int作为id。我的源表中没有那么多记录(< 20k),所以我希望将新ID分配给所有记录,这样ID就可以容纳一个int。我如何使用sql来做到这一点呢?
发布于 2016-06-06 12:12:00
你没有提供太多的细节,所以我只能提供一个一般的指导方针:
注意:示例假设您希望将表A和表B合并到C中,并且希望生成新的ID。我还假设其他表(外键)没有引用这些I。
首先,您可以从表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发布于 2016-06-06 12:10:09
First Option
您可以使用Sequence对象如下:
首先创建一个序列对象,并将它的开始值赋值给目标表中的最大Id值加上1。例如,如果目标表中的最大Id为100,则需要分配101作为开始。还可以使用Max( Id )聚合函数从目标表中获取最大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, ...)第二选择
https://stackoverflow.com/questions/37656879
复制相似问题