У меня есть CSV-файл, который мне нужно записать в таблицу Sql Server, используя SQLServerBulkCopy .Я использую SQLServerBulkCSVFileRecord для загрузки данных из файла.
Таблица назначения имеет следующую структуру:
create table TEST
(
ID int identity,
FIELD_1 int,
FIELD_2 varchar(20)
)
Файл CSV имеет следующую структуру:
4279895;AA00000002D
4279895;AA00000002D
4279895;AA00000002D
4279896;AA00000003E
4279896;AA00000003E
4279896;AA00000003E
Как видите, столбец идентификатора (удостоверения) отсутствует в csv, мне нужна база данных для автоматического добавления значения идентификатора при вставке.Моя проблема в том, что массовая вставка не работает, пока в таблице есть столбец идентификаторов. Я получил следующую ошибку:
com.microsoft.sqlserver.jdbc.SQLServerException: Source and destination schemas do not match.
at com.microsoft.sqlserver.jdbc.SQLServerBulkCopy.validateColumnMappings(SQLServerBulkCopy.java:1749)
at com.microsoft.sqlserver.jdbc.SQLServerBulkCopy.writeToServer(SQLServerBulkCopy.java:1579)
at com.microsoft.sqlserver.jdbc.SQLServerBulkCopy.writeToServer(SQLServerBulkCopy.java:606)
Это соответствующий код:
try (
Connection targetConnection = DriverManager.getConnection(Configuration.TARGET_CONNECTION_URL);
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(targetConnection);
SQLServerBulkCSVFileRecord fileRecord = new SQLServerBulkCSVFileRecord(csvPath, Charsets.UTF_8.toString(), ";", false);
) {
SQLServerBulkCopyOptions copyOptions = new SQLServerBulkCopyOptions();
copyOptions.setKeepIdentity(false);
bulkCopy.setBulkCopyOptions(copyOptions);
fileRecord.addColumnMetadata(1, null, java.sql.Types.INTEGER, 0, 0); // FIELD_1 int
fileRecord.addColumnMetadata(2, null, java.sql.Types.VARCHAR, 20, 0); // FIELD_2 varchar(20)
bulkCopy.setDestinationTableName("TEST");
bulkCopy.writeToServer(fileRecord);
}
catch (Exception e) {
// [...]
}
Массовая вставка успешно завершается, если я удаляю столбец идентификаторов из таблицы.Как правильно выполнить массовую вставку идентификатора с использованием java jdbc для Sql Server?