2013-04-07 96 views
3

我用下面的MS SQL查询导入包含逗号分隔值的文本文件到DB:完美的使用BULK INSERT查询

BULK INSERT logs 
FROM 'E:\Sample.txt' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 

不幸的是,在我的CSV文本文件中的一个字段包含这样的信息: “UDP端口中的问题(234,137)”,其中包含逗号。因此,DB将逗号前的值作为一个字段,并将逗号后的值插入下一个字段(逻辑上不正确)。结果,后者字段的合法值在插入表格时被丢弃。

希望我的问题得到最好的解释。

任何解决方案来克服这个问题,并将整个问题:“在UDP端口(234,137)问题”存储到一个单一的领域?

+0

如何获取csv文件? – 2013-04-07 14:14:48

+0

您的csv文件中的值是否一致引用?如果没有,那么你可能有[这个问题](http://stackoverflow.com/questions/782353/sql-server-bulk-insert-of-csv-file-with-inconsistent-引用)。 SQL Server似乎期望文件中的所有值都被引用,或者没有。出于这个原因,我更喜欢用一种具有良好csv支持的语言(Perl,Python,不管)来预处理文件,并且为导入生成一个'clean'csv文件,或者直接生成一个'INSERT'脚本。 – Pondlife 2013-04-07 15:53:42

回答

0

我更喜欢通过Microsoft日志解析器link运行我的CSV并将其转换为制表符分隔符。这种批量插入方式完美地读取它。

下面是关于使用日志解析器link的相当不错的链接。创建你的命令来读取你的csv并输出一个tsv,然后用xp_cmdshell调用它。

节省您为各种文件创建格式文件的麻烦。

+0

嗨..谢谢!几点意见: 1)尝试使用日志分析器。但是在Datagrid中查看时,我的所有字段都列在一个列中。 2)是否有任何选项可用于将输出TSV存储为文本文件格式? 3)请注意,我正在使用C#作为我的前端。因此,我必须能够阅读任何Logparser输出我.. 任何解决方案: – 2013-04-07 01:02:35

0

你试过把其他字段终止符?

+0

不!你为什么要我尝试它? – 2013-04-08 17:05:47