Вставка пакета записей в одну таблицу в SQL Server 2008, которая содержит составной ключ
Я новичок в Spring Source и SQL Server, извините за этот вопрос. Я пытаюсь вставить строки в таблицу (IN136_DMV_USED_CAR_SALES
). Эта таблица имеет составной ключ, который связан с другой родительской таблицей EXT_INF_LOAD
,
До сих пор я был в состоянии прочитать из входного файла и загрузить все строки в IN136_DMV_USED_CAR_SALES
таблица с двумя ключами: EXT_INF_LOAD_ID
а также IN136_ID
с помощью следующего оператора SQL:
ВСТАВИТЬ утверждение:
String sql = "insert into dbo.IN136_DMV_USED_CAR_SALES (EXT_INF_LOAD_ID, IN136_ID, " +
"DEALER_NUM, " +
"VSL_PURCHASE_DATE," +
"OWNERSHIP_ISSUED_DATE, " +
"LAST_TRANSFER_DATE, " +
"ODOMETER_CURRENT_DATE, " +
"WORK_DATE, " +
"PURCHASE_PRICE, " +
"VIN_HIN, " +
"CURRENT_LICENSE, " +
"REG_OWNER_NAME, " +
"REG_OWNER_ADDRESS2, " +
"REG_OWNER_ADDRESS3, " +
"REG_OWNER_CITY_OR_STATE," +
"LEGAL_OWNER_NAME," +
"LEGAL_OWNER_ADDRESS2," +
"LEGAL_OWNER_ADDRESS3," +
"LEGAL_OWNER_CITY_OR_STATE," +
"MAKE_BUILDER," +
"YEAR_MODEL," +
"VLF_CLASS," +
"IRP_ACCOUNT_MX_NUM," +
"IRP_ACCOUNT_NUM," +
"IRP_ACCOUNT_USDOT_NUM," +
"IRP_FLEET_MX_NUM," +
"IRP_FLEET_NUM," +
"IRP_FLEET_USDOT_NUM," +
"IRP_VEH_MX_NUM," +
"IRP_VEH_USDOT_NUM) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
JdbcTemplate jdbctempl = new JdbcTemplate(dataSource);
jdbctempl.update(sql, new Object[] {id1, id2++,
rec.getDealerNum(),
rec.getVslPurchaseDate(),
rec.getOwnershipIssueDate(),
rec.getLastTransferDate(),
rec.getOdometerCurrentDate(),
rec.getWorkDate(),
rec.getPurchasePrice(),
rec.getVinHin(),
rec.getCurrentLicense(),
rec.getRegOwnerName(),
rec.getRegOwnerAddress2(),
rec.getRegOwnerAddress3(),
rec.getRegOwnerCityOrState(),
rec.getLegalOwnerName(),
rec.getLegalOwnerAddress2(),
rec.getLegalOwnerAddress3(),
rec.getLegalOwnerCityOrState(),
rec.getMakeBuilder(),
rec.getYearModel(),
rec.getVlfClass(),
rec.getIrpAccountMxNum(),
rec.getIrpAccountNum(),
rec.getIrpAccountUsdotNum(),
rec.getIrpFleetMxNum(),
rec.getIrpFleetNum(),
rec.getIrpFleetUsdotNum(),
rec.getIrpVehMxNum(),
rec.getIrpVehUsdotNum()});
Моя проблема в том, что в IN136_DMV_USED_CAR_SALES
(дочерняя таблица), один из столбцов составного ключа (EXT_INF_LOAD_ID
) подключен к EXT_INF_LOAD
родительская таблица.
Итак, я думаю, что мне действительно нужно сделать (но я не знаю как) это:
Информация о
EXT_INF_ID
будет передаваться через параметр (сейчас я называю это "счетчиком"). Мне придется читатьEXT_INF
таблица, чтобы увидеть, могу ли я найти совпадение (Counter = EXT_INF_ID
). Итак, теперь, когда я нашел строку вEXT_INF
таблица, я могу получить значениеEXT_INF_NAME
столбец для заполненияEXT_INF_LOAD
Таблица (EXT_INF_FILE_NAME
колонка).Поскольку я знаю, что строка существует в
EXT_INF
таблица, я могу вставить новую строку в родительскую таблицу (EXT_INF_LOAD
), прежде чем начинать добавлять новые строки в дочернюю таблицу (IN136_DMV_USED_CAR_SALES
).
Новая строка для вставки в родительскую таблицу будет иметь следующие значения:
2.аEXT_INF_ID = Counter
,
2бEXT_INF_FILE_NAME = EXT_INF_NAME
(отEXT_INF
Таблица)
2.cEXT_INF_LOAD_DATE
= сегодняшняя дата
2.d Но как насчет дляEXT_INF_FILE_NAME
?Таким образом, я буду иметь возможность добавлять другие новые входные файлы в
IN136_DMV_USED_CAR_SALES
стол, как они возникают. И пока я использую то же значениеEXT_INF_LOAD_ID
для обоих:EXT_INF_LOAD
(родительская таблица) иIN136_DMV_USED_CAR_SALES
(детский стол), верно?
Но потом я понял, что (2.d) также нельзя передать через другой counter2
параметр, например, потому что значения EXT_INF_ID
а также EXT_INF_LOAD_ID
должны быть уникальными, т.е. дубликаты не допускаются...
Я надеялся, что кто-то может помочь мне найти правильный способ создания всех необходимых операторов SQL, потому что у меня было так много проблем / исключений (я также новичок в SQL Server)
Заранее спасибо за ваш интерес к этому вопросу. К сожалению, не удалось загрузить изображение таблиц, но вот операторы SQL для всех 3 таблиц:
Таблица 1: EXT_INF
SELECT [EXT_INF_ID]
,[EXT_INF_NAME]
,[EXT_INF_DESC]
FROM [boeafspdev1].[dbo].[EXT_INF]
where EXT_INF_ID = counter
Таблица 2:
SELECT [EXT_INF_ID]
,[EXT_INF_LOAD_ID]
,[EXT_INF_FILE_NAME]
,[EXT_INF_LOAD_DATE]
,[EXT_INF_COMMENTS]
FROM [boeafspdev1].[dbo].[EXT_INF_LOAD]
where EXT_INF_ID = counter