【问题标题】:Import Data into MS SQL database将数据导入 MS SQL 数据库
【发布时间】:2012-04-24 18:54:14
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过先将 csv 导入 SQL 暂存表,然后再尝试关联它们?
  • 这听起来很有趣。我不经常使用 MS SQL。我该怎么做?
  • 如果您需要批量插入部分的帮助,请继续发布其中一个 csv 文件名及其列名列表

标签: sql-server import


【解决方案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

【讨论】:

  • 谢谢,这很有用。不幸的是,CSV 目前还没有准备好(所以我现在无法测试它),但是这里的逻辑非常合理。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多