Вставка пакета записей в одну таблицу в 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 родительская таблица.

Итак, я думаю, что мне действительно нужно сделать (но я не знаю как) это:

  1. Информация о EXT_INF_ID будет передаваться через параметр (сейчас я называю это "счетчиком"). Мне придется читать EXT_INF таблица, чтобы увидеть, могу ли я найти совпадение (Counter = EXT_INF_ID). Итак, теперь, когда я нашел строку в EXT_INF таблица, я могу получить значение EXT_INF_NAME столбец для заполнения EXT_INF_LOAD Таблица (EXT_INF_FILE_NAME колонка).

  2. Поскольку я знаю, что строка существует в EXT_INF таблица, я могу вставить новую строку в родительскую таблицу (EXT_INF_LOAD), прежде чем начинать добавлять новые строки в дочернюю таблицу (IN136_DMV_USED_CAR_SALES).
    Новая строка для вставки в родительскую таблицу будет иметь следующие значения:
    2.а EXT_INF_ID = Counter,
    EXT_INF_FILE_NAME = EXT_INF_NAME (от EXT_INF Таблица)
    2.c EXT_INF_LOAD_DATE = сегодняшняя дата
    2.d Но как насчет для EXT_INF_FILE_NAME?

  3. Таким образом, я буду иметь возможность добавлять другие новые входные файлы в 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

0 ответов

Другие вопросы по тегам