Как выполнить массовую загрузку данных в таблицу SQL Server, на которую ссылаются внешние ключи, но данные отображаются в формате Excel? - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть таблица BasicDetails с этими столбцами:

ID   Name   Father    Country_ID   City_ID   ContactDetails_ID

Но клиент поделился со мной листами Excel, и я должен загрузить их в таблицу. Лист имеет следующие столбцы

ID   Name   Father   CountryName   CountryCode   CityName   CityCode   ContactNo   CellNo   Address

Теперь в моей базе данных CountryName, CountryCode, CityName они хранятся в отдельной таблице с именем Countries.

CityName CityCode сохраняются в отдельной таблице Cities.

ContactNo CellNo Address хранятся в отдельной таблице ContactDetails

Их соответствующие первичные ключи используются в качестве внешнего ключа в основной таблице.

Теперь проблема в том, что у меня есть тысячи записей, и я не могу понять, как мне импортировать данные в таблицу BasicDetails, на которую ссылаются внешние ключи.

1 Ответ

1 голос
/ 16 февраля 2020

Вы должны сделать это из нескольких частей.

Загрузить таблицы Excel в промежуточную таблицу, скажем staging.

Затем убедитесь, что ссылки на внешние ключи работают, для экземпляр:

select s.countrycode, count(*)
from staging s left join
     countries c
     on s.countrycode = c.countrycode
where c.countrycode is null
group by s.countrycode;

Вы должны повторить это для cities и contacts. Последнее может быть более сложным. Этот вопрос не спрашивает, что делать с конфликтующей информацией - если вам нужна помощь в этом, задайте НОВЫЙ вопрос.

Когда вы убедитесь, что все справочные таблицы верны, вы можете загрузить таблицу с помощью join с:

insert into basicdata (Name, Father, Country_ID, City_ID ContactDetails_ID)
    select s.name, s.father, co.country_id, ci.city_id,
           con.contact_id
    from staging s join
         counties co
         on s.countrycode = co.countrycode join
         cities ci
         on s.citycode = ci.citycode join
         contacts con
         on s.contacctno = con.contactno;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...