我目前正在开发一个项目,该项目要求将第三方软件生成的报告中的数据插入到本地SQL数据库中。到目前为止,我将数据存储为制表符分隔的.txt文件和以下批量插入SQL语句:
BULK INSERT ExampleTable
FROM 'c:\temp\Example.txt'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
GO
我遇到的两个问题是,包含它自己的逗号的任何值周围的引号,以及每个具有金额的字段中的货币符号。
例如,表中的一列是描述字段,其中一些值看起来像: “这是一个示例描述,一些更多的信息,我不知道为什么作者会在这里首先使用逗号”
我不关心描述字段几乎与包含美元金额的其他字段一样。这些字段中的每一个都以$符号为前缀,因此我必须将它们设置为nvarchar而不是小数或浮点数,这对 A LOT 更有用。此外,当美元金额大于1000时,该字段还将包含逗号,因此也包含引号。前“$ 1,084.59”
我熟悉SSMS,但我从未制作过格式或bcp文件(我在网上找到的解决方案)。
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用格式文件,但前提是您的元数据保持不变,但在您的情况下似乎不是这样。您声明只有当美元金额超过999且插入了逗号时才会用引号括起来。格式文件允许您定义每列分隔符,例如[,]或[“,”]。但是,如果该分隔符在整个文件中移动,则必须预处理该文件。不支持文本限定符。
供参考:
http://jessesql.blogspot.com/2010/05/bulk-insert-csv-with-text-qualifiers.html
答案 1 :(得分:0)
我不明白为什么,但是ThiefMaster删除了我的答案:-( probabaly一个错误,他没有检查链接,因为这个链接是你问题的完整答案,我会在最后一次再次尝试...
提示:如果您的CSV文件格式不一致,例如在同一列上有一些值是双重的,有些值不是这个博客会帮助您轻松完成(在最后一步使用openrowset)使它成为一个简单的查询):http://ariely.info/Blog/tabid/83/EntryId/122/Using-Bulk-Insert-to-import-inconsistent-data-format-using-pure-T-SQL.aspx