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
我有 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