2

我正在尝试确定如何将一些 CSV 数据导入 MS SQL 数据库。

不幸的是,它并不像听起来那么简单,因为涉及的不止一张桌子。此外,一些字段将从 CSV 中提取,而其他字段将具有固定值。

在关联多个表方面,我的逻辑如下:

IF <select count(course_name) from tbl_courses WHERE course_name = 'value from csv'> GT 0
THEN
  ADD <data> to TBL_ITEM using PK from TBL_COURSES
ELSE
  CREATE ROW in TBL_COURSES WITH <data>
  ADD <data> to TBL_ITEM using PK from TBL_COURSES
END IF

有没有办法将我的 CSV 中的字段映射到 tbl_item (同时根据需要向 tbl_courses 添加一行?)

4

2 回答 2

1

您不能以这种方式直接进行导入。您需要先将 CSV 导入临时表(其名称无关紧要 - 只需将所有内容批量导入其中)。

在关系表中提供 CSV 后,您可以执行任何您想要的 SQL。您可以通过这种方式执行任意导入过程。

完成后,您可以删除临时表。

于 2012-04-24T19:33:06.817 回答
1

基本上,您想开始基于思维定势并执行以下步骤:

  1. 将 CSV 导入临时表。

  2. 从您的临时表中选择插入到您的课程表中,您也可以包含您的静态数据,但请确保区分以确保不会重复输入。

  3. 从临时表中选择插入到项目表中,包括课程表 PK 将取决于您的 CSV 数据。如果您已经将唯一的课程 ID 作为 CSV 数据的一部分,那就太好了,否则您可以将子查询作为插入的一部分。

这是我试图解释的一个例子,如果它有帮助,显然 courseData 和 itemData 真的是你的字段集......

-- setup for example
declare @course table (courseId int, courseData varchar(50))
declare @item table (itemId int, courseId int, itemData varchar(50))

declare @csvdata table (courseid int, coursedata varchar(50), itemid int, itemdata varchar(50))

insert into @csvdata 
values (1, 'a', 1, 'b'), (1, 'a', 2, 'c'), (2, 'b', 3, 'c')

-- the important bit
insert into @course
select distinct courseId, courseData
from @csvdata

insert into @item
select itemId, courseId, itemData
from @csvdata

select * from @course
select * from @item
于 2012-04-24T19:44:55.937 回答