我有一个带有GeoCodes列的csv文件。这使用“作为文本限定符。
我正在尝试使用SQL Server导入向导将其导入SQLServer。 数据的问题是,如果没有GeoCode,csv文件有时会将GeoCode输出为“”,然后输出几个空格。尝试导入数据时,如果它在文本限定符中获取数据,然后在下一个逗号分隔符之前有这些空格,则会出错。
以下数据的示例。 Pontypandy行是错误的行。
Place ,Geo Codes ,Type
Northpole ,"90.0000,0.0000 ",Pole
Southpole ,"-90.0000,0.0000 ",Pole
Pyramids ,"29.9765,31.1313 ",BigTriangle
France ," ",Country
Pontypandy ," " ,City
我必须使用文本限定符,因为GeoCodes中有一个逗号。
我没有说明数据如何发送给我,因此必须按原样处理数据。
作为一种解决方法,我必须在导入之前首先在记事本中查找和替换数据。这为工作增加了一个额外的步骤,希望不需要。
无论如何,我可以在导入过程中绕过“”空格吗?
作为一个额外的说明,我目前无法访问SSIS,但如果可以在那里完成任何更容易,那么请回答,因为它可以帮助我证明获得SSIS(我可能不得不删除此评论,如果我必须把它展示给我的经理。
答案 0 :(得分:1)
如果您的数据真的与上面显示的方式相同,则可以使用固定宽度格式。按原样导入数据并替换“之后。这不是最好的解决方案。”
好多了:在导入之前通过sed管道导入文件。这不仅快得多,而且在所有情况下,当数据大于RAM时,唯一简单的方法(好的,还有其他一些)。您只需要在操作系统级别进行操作。如果你可以将可执行文件复制到某个地方就可以了。如果你想用“[任意数量的空白]替换”,这应该是正则表达式:
cat myfile.txt|sed -b -e "s/\" *,/\",/">yournewfile.txt
一旦你明白了,正则表达式很简单: - s表示替补, - / first / second /表示首先查找并替换为second, - \“是逃脱的”(因为DOS) - 空格和*表示任意数量的空格 - ,意思,
在许多系统上,sed仍然存在(cygwin)。玩得开心!
答案 1 :(得分:1)
两种批量插入方法
identity
& varchar(max)
; identity
表示行数& varchar(max)
将是您的行数据varchar(max)
字段的视图
批量插入语法如下所示:
BULK INSERT AdventureWorks2012.Sales.v_SalesOrderDetail
FROM 'f:\orders\lineitem.csv'
WITH (
ROWTERMINATOR =' |\n'
);
RowTerminator
和LineTerminator
选项