簡體   English   中英

sql server批量插入帶有逗號的數據的csv

[英]sql server Bulk insert csv with data having comma

下面是 csv 的示例行

012,12/11/2013,"<555523051548>KRISHNA  KUMAR  ASHOKU,AR",<10-12-2013>,555523051548,12/11/2013,"13,012.55",

您可以將KRISHNA KUMAR ASHOKU,AR視為單個字段,但由於逗號,它將 KRISHNA KUMAR ASHOKU 和 AR 視為兩個不同的字段,盡管它們用 "​​ 括起來,但仍然沒有運氣

我試過

BULK
INSERT tbl
FROM 'd:\1.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FIRSTROW=2
)
GO

有什么解決辦法嗎?

答案是:你不能那樣做。 請參閱http://technet.microsoft.com/en-us/library/ms188365.aspx

"從 CSV 文件導入數據

SQL Server 大容量導入操作不支持逗號分隔值 (CSV) 文件。 但是,在某些情況下,CSV 文件可用作將數據批量導入 SQL Server 的數據文件。 有關從 CSV 數據文件導入數據的要求的信息,請參閱為批量導出或導入准備數據 (SQL Server)。”

一般的解決方案是您必須將您的 CSV 文件轉換為可以成功導入的文件。 您可以通過多種方式執行此操作,例如通過使用不同的分隔符(例如 TAB)創建文件或使用理解 CSV 文件(例如 Excel 或許多腳本語言)的工具導入您的表格並使用唯一的分隔符(例如 TAB),然后您可以從中批量插入。

不幸的是,SQL Server 導入方法(BCP && BULK INSERT)不理解引用“”

來源: http : //msdn.microsoft.com/en-us/library/ms191485%28v=sql.100%29.aspx

我最近遇到了這個問題,不得不切換到制表符分隔的格式。 如果您這樣做並使用 SQL Server Management Studio 進行導入(右鍵單擊數據庫,然后選擇任務,然后選擇導入)制表符分隔的工作就好了。 帶有制表符分隔的批量插入選項也應該有效。

當我發現 Microsoft SQL Server 有這個逗號分隔的問題時,我必須承認我感到非常驚訝。 CSV 文件格式是一種非常古老的格式,因此發現這是現代數據庫的問題非常令人失望。

他們增加了對此 SQL Server 2017 (14.x) CTP 1.1 的支持。 您需要對 BULK INSERT 命令使用 FORMAT = 'CSV' 輸入文件選項。

需要明確的是,這是給我帶來問題的 csv 的樣子,第一行很容易解析,第二行包含曲線球,因為引用的字段中有一個逗號:

jenkins-2019-09-25_cve-2019-10401,CVE-2019-10401,4,Jenkins Advisory 2019-09-25: CVE-2019-10401: 
jenkins-2019-09-25_cve-2019-10403_cve-2019-10404,"CVE-2019-10404,CVE-2019-10403",4,Jenkins Advisory 2019-09-25: CVE-2019-10403: CVE-2019-10404: 

損壞的代碼

BULK INSERT temp
    FROM 'c:\test.csv'
    WITH
    (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '0x0a',
        FIRSTROW= 2
    );

工作代碼

BULK INSERT temp
    FROM 'c:\test.csv'
    WITH
    (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '0x0a',
        FORMAT = 'CSV',
        FIRSTROW= 2
    );

MS 現在已經解決了這個問題,您可以在 with 子句中使用 FIELDQUOTE 來添加帶引號的字符串支持:

FIELDQUOTE = '"',

如果你有 SQL Server 2017 或更高版本,你的 with 子句中的任何地方都應該可以解決問題。

好吧,批量插入非常快但不是很靈活。 您能否將數據加載到臨時表中,然后將所有內容推送到生產表中? 進入 SQL Server 后,您將在如何將數據從一個表移動到另一個表方面擁有更多控制權。 所以,基本上。

1)    Load data into staging
2)    Clean/Convert by copying to a second staging table defined using the desired datatypes. Good data copied over, bad data left behind
3)    Copy data from the "clean" table to the "live" table

暫無
暫無

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

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