[英]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.