【发布时间】:2014-06-04 14:00:35
【问题描述】:
给了我一个 3Gb 的 csv 文件,我需要将它导入 SQL Server 2012。
我现在有 500 万行的数据在一个暂存表中,看起来像这样(简化)。
Staging表:
+-------------------+------------+---------------+------------+
| Name | Thumbnail | Tags | Categories |
+-------------------+------------+---------------+------------+
| History | thumb1.jpg | history,essay | history |
| Nutricion Lecture | thumb2.jpg | food,essay | health |
+-------------------+------------+---------------+------------+
问题是关于我的临时表中的tags 和categories 列。
如何将信息从我的临时表传输到我的实际表,并为每个标签和类别创建一个唯一记录 - 和创建所需的许多 -对多关系?
它需要根据现有标签检查每个标签以创建新记录 - 或 - 获取现有标签的 Id。
Programs:
+----+-----------+------------+
| id | Program | Thumbnail |
+----+-----------+------------+
| 1 | History | thumb1.jpg |
| 2 | Nutricion | thumb2.jpg |
+----+-----------+------------+
Tags:
+----+---------+
| Id | Tag |
+----+---------+
| 1 | history |
| 2 | essay |
| 3 | food |
+----+---------+
(类别表省略,因为它看起来与标签相同)
多对多关系:
Programs_Tags:
+---------+-----+
| program | tag |
+---------+-----+
| 1 | 1 |
| 1 | 2 |
| 2 | 2 |
+---------+-----+
Programs_Categories:
+---------+----------+
| program | category |
+---------+----------+
| 1 | 1 |
| 2 | 2 |
+---------+----------+
我假设这在纯 SQL 中更快,然后为它编写一个工具。
【问题讨论】:
标签: sql sql-server parsing csv many-to-many