sql 转换脚本

sql conversion script

我有 2 个数据库,我想将它们与一些类似的 table 合并。源 table 的 ID 为 bigint,我的目标 table 的 ID 为 int。我的源 table (< 20k) 中没有那么多记录,所以我想为所有记录分配新的 ID,以便 ID 可以放入一个 int 中。我如何使用 sql 执行此操作?

第一个选项

您可以按如下方式使用 Sequence 对象:

首先创建一个Sequence对象,并将其Start With值赋给目标table中的最大Id值加1。例如,如果目标table中的最大Id为100,则需要分配101作为开始。您还可以使用 Max(Id) 聚合函数从目标 table 获取最大 Id 值并将其存储在变量中:

CREATE SEQUENCE SeqId
START WITH [Max value of Id in destination table]  
INCREMENT BY 1 ;  
GO  

然后使用以下查询插入目标 table:

Insert Into tblXXX (Id, ...) Values (NEXT VALUE FOR SeqId, ...)

Read more about Sequence Object

第二个选项

您可以将目标 table 的 ID 列设为标识列,种子等于目标 table 的 ID 列最大值,增量等于 1。 Here is detailed example also Here

您没有提供太多细节,所以我只能提供一个大概的指导方针:
注意:示例假设您想要将 tables A 和 B 合并到 C 中,并且您想要生成新的 ID。我还假设这些 ID 没有被其他 tables(外键)引用。

首先,您从 tables A 和 B 中获取记录计数:

DECLARE @countA INT
DECLARE @countB INT
SET @countA = ( SELECT COUNT(*) FROM A )
SET @countB = ( SELECT COUNT(*) FROM B )

接下来使用 window 函数生成新 ID 并将记录插入 table 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