我正在使用以下语句成功地将.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
答案 0 :(得分:0)
一种方法是使用临时表。将所有数据作为文本读取,然后将整个表中的每个逗号替换为点(.
),如果您希望将其作为小数分隔符,或者将其替换为空字符串(''
),如果它是千位分隔符,然后将数据加载到exisitng表转换所有内容(您不必明确地执行此操作,SQL会暗示它)。
答案 1 :(得分:0)
去年我为客户做了一个项目,涉及导入csv文件,这些文件的格式相同,但来自不同的来源,因此不一致(甚至根据来源使用不同的分隔符) 。我最终编写了一个CLR例程,它逐行读取csv,解析内容,并将其添加到DataTable中。然后使用SqlBulkCopy类将此DataTable插入SQL Server。
这种方法的优点是,我完全可以控制处理文件中的所有异常。它也比将整个文件插入varchars的临时表然后在SQL Server中解析的替代方法快得多。实际上,我在c#中逐行解析并解析了一个解析数据。