我需要將一些CSV文件導入到SQL中相應的表中。我試圖編寫一個存儲過程,將導入任何這些CSV文件,使用一些參數來設置文件名,目的地名稱等東西。具有驗證功能的CSV導入
到目前爲止很簡單。問題出在這個DB的結構上。每個數據表都有許多(通常是5)列,它們是一組設置格式,然後是所需的許多數據列。然後有一組數據驗證表,其中包含這5列可以包含的特定值組。所以問題是,當我從CSV導入時,我需要驗證導入的每一行都符合這些驗證表中的條件,實質上驗證表中有一行中的數據與5導入數據中的列。
如果沒有,那麼它需要向日志中寫入錯誤並且不導入它,如果是的話就應該導入它。
這裏是我的意思的例子:
數據表(其中導入的數據會)
|datatype|country|currency| datacolumn1 | datacolumn|
|1 | 2 | GBP | 10000 | 400 |
|3 | 4 | USD | 10000 | 400 |
驗證表
|datatype|country|currency|
|1 |2 |GBP |
|2 |3 |USD |
所以第一行是有效的,它在前3列的驗證表中具有匹配記錄,但是se cond不是,應該被拒絕。
增加的問題是每個表可以引用不同的驗證表(儘管許多引用同一個表),所以必須檢查的列經常在數量和名稱上有所不同。
我的第一個問題是如何在從CSV導入時逐行檢查,有沒有辦法在不導入臨時表的情況下執行此操作? 之後,檢查列匹配的最好方法是什麼,儘管事實上列的名稱和列數根據正在導入的表而變化,但檢查列是否匹配。
快速,簡短的回答:使用SQL Server Integration Services(SSIS) – 2010-07-12 14:45:20
您是否真的需要進行逐行驗證?這將是一個痛苦緩慢的過程,如果你碰巧有大量的行 – 2010-07-12 14:45:38
@philip不幸的是,這是不可能的,它需要從另一套存儲過程調用 – 2010-07-12 14:46:23