将自动生成的 ID 从 Oracle 迁移到 SQL 服务器
Migrate auto generated IDs from Oracle to SQL Server
我目前正在开发一个 java 应用程序,用于将 Oracle 数据库的数据迁移到我使用 liquibase 迁移的等效结构化 SQL 服务器数据库。现在我也不知道如何迁移自动生成的 ID,因为它不是那么容易访问的东西。我希望它们具有与我的源数据库中完全相同的值,并且我希望它们继续运行,因此当最后一个自动生成的 ID 为 177 时,我希望下一个生成的 ID 为 178。我知道这是一个模糊的问题但目前我只是想在我的代码中应用一个概念,所以欢迎任何建议。提前致谢!
概念是使用 SSIS/linked server/Polybase/bcp:
按原样将数据从 Oracle 移动到 SQL 服务器
INSERT INTO SQL_Server_table(id, ...)
SELECT id, ...
FROM Oracle_table;
如果table有IDENTITY
属性那么你必须先禁用它:
SET IDENTITY_INSERT SQL_Server_table ON
移动数据后,您需要将身份设置为最高值:
DBCC CHECKIDENT ('SQL_Server_table', RESEED, <max_calculated_value>+1);
如果 table 没有定义标识列,您可以使用 SEQUENCE
:
CREATE SEQUENCE dbo.SQL_Server_table_seq
START WITH <max_calculated_value>+1
INCREMENT BY 1 ;
ALTER TABLE SQL_Server_table
ADD CONSTRAINT df_SQL_Server_table_seq
DEFAULT NEXT VALUE FOR dbo.SQL_Server_table_seq FOR [<identity_column>];
我目前正在开发一个 java 应用程序,用于将 Oracle 数据库的数据迁移到我使用 liquibase 迁移的等效结构化 SQL 服务器数据库。现在我也不知道如何迁移自动生成的 ID,因为它不是那么容易访问的东西。我希望它们具有与我的源数据库中完全相同的值,并且我希望它们继续运行,因此当最后一个自动生成的 ID 为 177 时,我希望下一个生成的 ID 为 178。我知道这是一个模糊的问题但目前我只是想在我的代码中应用一个概念,所以欢迎任何建议。提前致谢!
概念是使用 SSIS/linked server/Polybase/bcp:
按原样将数据从 Oracle 移动到 SQL 服务器INSERT INTO SQL_Server_table(id, ...)
SELECT id, ...
FROM Oracle_table;
如果table有IDENTITY
属性那么你必须先禁用它:
SET IDENTITY_INSERT SQL_Server_table ON
移动数据后,您需要将身份设置为最高值:
DBCC CHECKIDENT ('SQL_Server_table', RESEED, <max_calculated_value>+1);
如果 table 没有定义标识列,您可以使用 SEQUENCE
:
CREATE SEQUENCE dbo.SQL_Server_table_seq
START WITH <max_calculated_value>+1
INCREMENT BY 1 ;
ALTER TABLE SQL_Server_table
ADD CONSTRAINT df_SQL_Server_table_seq
DEFAULT NEXT VALUE FOR dbo.SQL_Server_table_seq FOR [<identity_column>];