В настоящее время я разрабатываю java-приложение для переноса данных базы данных Oracle в эквивалентную структурированную базу данных SQL Server, которую я перенес с помощью liquibase. Теперь я не мог понять, как перенести автоматически сгенерированные идентификаторы, поскольку это не так просто. Я хочу, чтобы они имели те же значения, что и в моей исходной базе данных, и я хочу, чтобы они были постоянными, поэтому, когда последний автоматически сгенерированный идентификатор был 177 для примера, я хочу, чтобы следующий сгенерированный был 178. Я знаю, что это расплывчатый вопрос но в настоящее время я просто думаю о концепции, которую можно применить в моем коде, поэтому любые предложения приветствуются. Заранее спасибо!
Перенос автоматически сгенерированных идентификаторов из Oracle в SQL Server
comment
Возможно, вы можете попробовать использовать SET IDENTITY_INSERT ‹tablename› ON перед вставкой данных! После этого вы можете измениться. Проверьте DBCC CHECKIDENT, чтобы изменить начальное значение столбца идентификации после вставки.
- person MarcelS   schedule 07.11.2019
comment
Помощник по миграции SQL Server для Oracle сделает все это за вас. microsoft.com/en-us/download/details.aspx? идентификатор = 54258
- person David Browne - Microsoft   schedule 12.11.2019
comment
@DavidBrowne-Microsoft Это обязательно должно быть опубликовано как ответ. Кстати. обрабатывает ли SSMA столбцы ГЕНЕРИРОВАННЫЕ ВСЕГДА и/или пользовательские автоматически увеличиваться?
- person Lukasz Szozda   schedule 13.11.2019
Ответы (1)
Идея состоит в том, чтобы переместить данные из Oracle в SQL Server как есть, используя SSIS/связанный сервер/Polybase/bcp:
INSERT INTO SQL_Server_table(id, ...)
SELECT id, ...
FROM Oracle_table;
Если у таблицы есть свойство IDENTITY
, вы должны сначала отключить его:
SET IDENTITY_INSERT SQL_Server_table ON
После того, как вы переместили данные, вам нужно установить идентификатор на максимальное значение:
DBCC CHECKIDENT ('SQL_Server_table', RESEED, <max_calculated_value>+1);
Если в таблице не определен столбец идентификаторов, вы можете использовать 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>];
person
Lukasz Szozda
schedule
12.11.2019
почему мне нужно установить идентификатор на максимальное значение?
- person Mad Scientist; 14.11.2019
@MadScientist Чтобы избежать конфликтов, когда вы хотите вставить новые данные. Проверьте предоставленный пример
- person Lukasz Szozda; 14.11.2019