我想從csv文件導入數據到SQL Server。在csv文件中有成千上萬的條目,我們有很多行中有不正確的數據。從csv文件批量插入 - 忽略有錯誤的行 - SQL Server
一些CSV文件中的行是:
`"ID"|"EmpID"|"FName"|"LName"|"Gender"|"DateOfBirth"
"1"|"90043041961"|"ABCD"|"TEST"|"F"|"1848-05-05 00:00:00.000"
"1"|"10010161961"|"XYZ"|"TEST"|"F"|"1888-12-12 00:00:00.000"
.
.
..
..
....
"4"|"75101141821PPKKLL"|"LLKK"|"F"|"1925-09-09 00:00:00.000"|""
"4"|"32041401961UUYYTT"|"PPLL"|"M"|"1920-01-01 00:00:00.000"|""
.
.....
"25"|"00468132034"|"FGTT"|"OOOO"|"F"|"1922-11-11 00:00:00.000"
"25"|"00468132034"|"KKKK"|"PPPP"|"F"|"1922-11-11 00:00:00.000"
創建TestTable的,並試圖插入數據(來自CSV文件)到它:
create table TestTable
(
ID varchar(5),
EmpID varchar(25),
FName varchar(25),
LName varchar(25),
Gender varchar(5),
DateOfirthB varchar(30)
);
我使用下面的腳本從csv文件中的SQL Server數據導入TestTable
:
bulk insert TestTable
from 'C:\TestData.csv'
with
(firstrow = 2,
DATAFILETYPE='char',
FIELDTERMINATOR= '"|"',
ROWTERMINATOR = '\n',
ERRORFILE ='C:\ImportErrors.csv',
MAXERRORS = 0,
TABLOCK
);
錯誤:
消息4863,級別16,狀態1,行1
爲32763行批量負載數據轉換錯誤(截斷),第5列(性別)。Msg 4863,Level 16,State 1,Line 1
Row 32764,列5(性別)的批量加載數據轉換錯誤(截斷)。
是否有任何方法可以忽略行(在csv文件中)由於某些原因或其他原因無法添加的行並插入具有正確語法的行?
感謝
PS:我不能使用SSIS。只允許使用SQL
我知道這並不能回答你的問題,但老實說,我認爲你會更好嘗試使用SSIS做到這一點,而不是原始的SQL – DForck42
@ DForck42 - 我希望我能使用SSIS但可以不。我只能用這個SQL ...感謝您的建議 –
通常的過程是首先將數據導入更寬容的臨時表(即所有字段都是NVARCHAR(4000))。然後使用SQL來清理並將數據移動到最終表中。我個人更喜歡這種方法自己的SSIS –