2012-04-24 141 views
2

我想確定如何導入一些CSV數據到MS SQL數據庫。導入數據到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?)

+0

您是否嘗試過第一次導入CSV的到SQL在嘗試將它們關聯之前登臺? – 2012-04-24 19:01:44

+0

這聽起來很有趣。我不經常使用MS SQL。我將如何做到這一點? – 2012-04-24 19:19:27

+0

如果您需要批量插入部分的幫助,請繼續併發佈一個csv文件名和其列名稱列表 – 2012-04-24 19:58:16

回答

1

基本上你要開始考慮基於集合並執行以下步驟:

  1. 導入您的CSV到一個臨時表。

  2. 從您的臨時表中選擇插入到您的課程表中,您也可以包含您的靜態數據,但請確保不同,以確保不會出現重複條目​​。

  3. 插入您的項目表中從您的臨時表中選擇,包括課程表PK將取決於您的CSV數據。如果你已經有唯一的課程編號作爲CSV數據的一部分,那麼很好,否則你可以作爲插入的一部分進行子查詢。

這裏是什麼,我試圖解釋,如果有幫助,顯然cou​​rseData和的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 
+0

謝謝,這非常有用。不幸的是,CSV目前還沒有準備好(所以我現在無法測試它),但是這裏的邏輯非常合理。 – 2012-04-24 20:01:41

1

您不能直接進行導入。您需要首先將CSV導入臨時表(它的名字無關緊要 - 只需將所有內容導入到它中)。

在關係表中使用CSV後,您可以執行任何您想要的SQL。你可以用這種方式執行任意的導入過程。

完成後,您可以刪除臨時表。