将数据导入MS SQL数据库

时间:2012-04-24 18:54:14

标签: sql-server import

我正在尝试确定如何将一些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中添加一行?)

2 个答案:

答案 0 :(得分:1)

你无法直接导入。您需要先将CSV导入临时表(其名称无关紧要 - 只需将所有内容批量导入其中)。

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

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

答案 1 :(得分:1)

基本上你想开始思考基于并执行以下步骤:

  1. 将您的CSV导入临时表。

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

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

  4. 以下是我试图解释它是否有帮助的一个例子,显然,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