如何将数据大容量加载到由外键引用但数据为 Excel 格式的纯 SQL Server 表中?



我有一个包含这些列的表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表中。

您需要分多个部分执行此操作。

将 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;

您需要对citiescontacts重复此操作。 后者可能更复杂。 这个问题没有问如何处理冲突的信息 - 如果您需要帮助,请问一个新问题。

当您确信所有引用表都正确时,可以使用joins 加载表:

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;

最新更新