1

我目前正在开展一个项目,该项目需要将第三方软件生成的报告中的数据插入本地 SQL 数据库。到目前为止,我已将数据存储为制表符分隔的 .txt 文件和以下批量插入 SQL 语句:

BULK INSERT ExampleTable
FROM 'c:\temp\Example.txt'
WITH
(
FIRSTROW = 2, 
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
GO

我遇到的两个问题是,包含它自己的逗号的任何值的引号,以及每个具有美元金额的字段中的货币符号。

例如,表的其中一列是描述字段,其中一些值看起来像:“这是一个示例描述,还有更多信息,我不知道为什么作者会在这里首先使用逗号"

与包含美元金额的其他字段一样,我并不关心描述字段。这些字段中的每一个都已以 $ 符号为前缀,因此我必须将它们设置为 nvarchar 而不是小数或浮点数,这对于报告会更有用此外,当美元金额大于 1000 时,该字段还将包含逗号,因此也包含引号。例如“1,084.59 美元”

我对SSMS很熟悉,但是我从来没有制作过格式或bcp文件(我在网上找到的解决方案)。

任何帮助将不胜感激。

4

2 回答 2

0

我不明白为什么,但 ThiefMaster 删除了我的答案 :-( 可能是一个错误,他没有检查链接,因为这个链接是你问题的完整答案,我会在这里最后一次再试一次......

提示:如果您的 CSV 文件没有一致的格式,例如在同一列上,有些值是双引号,有些不是这个博客将帮助您以一种简单的方式做到这一点(在最后一步中使用 openrowset 使其成为一个简单的查询):http ://ariely.info/Blog/tabid/83/EntryId/122/Using-Bulk-Insert-to-import-inconsistent-data-format-using-pure-T-SQL.aspx

于 2013-09-17T11:51:13.507 回答
0

您可以使用格式文件,但前提是您的元数据保持不变,而您的情况似乎并非如此。您声明仅当美元金额超过 999 并插入逗号时,才会将其括在引号中。格式文件将允许您定义每列分隔符,例如 [,] 或 [","]。但是,如果该分隔符在整个文件中移动,则您必须对文件进行预处理。不支持文本限定符本身。

以供参考:

SQL Server 2008 中的 CSV 导入

http://jessesql.blogspot.com/2010/05/bulk-insert-csv-with-text-qualifiers.html

于 2013-07-09T15:43:21.877 回答