读取csv文件并将数据导入SQL Server

时间:2017-09-14 03:48:06

标签: sql-server csv

我正在使用以下语句成功地将.csv文件中的数字读入SQL Server,假设我已经创建了一个名为CSV_IMPORT的链接服务器。

select * 
from CSV_IMPORT...Sophos#csv

然而,问题是如果我有一个数字作为数据的逗号,它将显示NULL而不是正确的。如何正确地将“54,375”读入SQL Server?非常感谢你的帮助。

以下是csv文件中的数据。

09/07/2017,52029,70813,10898,6691,6849,122,25,147427
09/08/2017,47165,61253,6840,5949,5517,75,2,126801
09/14/2017,"54,375","16944","15616","2592","3280",380,25,"96390"

这是声明的结果:

2017-09-07 00:00:00.000 52029   70813   10898   6691    6849    122 25  147427
2017-09-08 00:00:00.000 47165   61253   6840    5949    5517    75  2   126801
2017-09-14 00:00:00.000 NULL    16944   15616   2592    3280    380 25  96390

2 个答案:

答案 0 :(得分:0)

一种方法是使用临时表。将所有数据作为文本读取,然后将整个表中的每个逗号替换为点(.),如果您希望将其作为小数分隔符,或者将其替换为空字符串(''),如果它是千位分隔符,然后将数据加载到exisitng表转换所有内容(您不必明确地执行此操作,SQL会暗示它)。

答案 1 :(得分:0)

去年我为客户做了一个项目,涉及导入csv文件,这些文件的格式相同,但来自不同的来源,因此不一致(甚至根据来源使用不同的分隔符) 。我最终编写了一个CLR例程,它逐行读取csv,解析内容,并将其添加到DataTable中。然后使用SqlBulkCopy类将此DataTable插入SQL Server。

这种方法的优点是,我完全可以控制处理文件中的所有异常。它也比将整个文件插入varchars的临时表然后在SQL Server中解析的替代方法快得多。实际上,我在c#中逐行解析并解析了一个解析数据。