簡體   English   中英

將CSV導入SQL多表

[英]Import CSV into SQL multiple tables

我正在將數據從一個系統遷移到另一個系統,並且將接收包含要導入數據的CSV文件。 該文件最多可以包含一百萬條要導入的記錄。 我需要獲取文件中的每一行,對其進行驗證,然后將數據放入相關表中。 例如,CSV類似於:

Mr,Bob,Smith,1 high street,London,ec1,012345789,work(this needs to be looked up in another table to get the ID)

在實際文件中,有比此示例更多的數據。

因此,SQL將如下所示:

Declare @UserID
Insert into User
Values ('Mr', 'Bob', 'Smith', 0123456789)
Set @UserID = @@Identity
Insert into Address
Values ('1 high street', 'London', 'ec1', select ID from AddressType where AddressTypeName = 'work')

我當時正在考慮遍歷每一行,並使用包含上述SQL的文件中的參數調用SP。 這是解決這個問題的最佳方法嗎? 它不是時間緊迫的,因為這將在更新站點時僅運行一次。

我正在使用C#和SQL Server 2008 R2。

您如何將其作為登台加載到臨時表中(請注意,這在邏輯上可能是臨時的-不一定從技術上來說),然后從那里進行處理。 這是標准的ETL行為(對於ETL而言,這是一百萬個小數目),您首先將數據分段,然后對其進行清理,然后將其放置到最終位置。

在執行這種性質的任務時,您不會認為要逐個循環瀏覽每個記錄,因為這將是一個巨大的性能問題。 在這種情況下,您可以將記錄批量插入到暫存表中,或者使用向導導入到暫存表中(特別是在地址字段中查找默認的50個字符),然后編寫基於集合的代碼來進行清理需要(刪除錯誤的電話號碼,郵政編碼,電子郵件地址或狀態,或者在數據庫中必需的字段中記錄丟失的數據,或者使用查找表來轉換數據(假設您的表具有某些必填值,這些值可能與您會在此文件中找到需要轉換的文件,我們經常使用醫生的特殊性,因此我們的系統可能會將它們存儲為GP,但文件可能會為我們提供General Practioner的值。您需要查看所有不匹配的文件字段的值,然后確定是否可以將它們映射到現有值,是否需要將記錄扔掉或是否需要向查找表中添加更多值。一旦擺脫了記錄,就不再需要清理那些你可以在你的工作人員 ging表,然后導入到prod表。 當您寫入多個記錄時,應使用INSERT的SELECT版本寫入插入內容,而不是使用VALUES子句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM