【问题标题】:SQL Server BCP Utility incorrect data importSQL Server BCP Utility 数据导入不正确
【发布时间】:2019-02-21 16:18:53
【问题描述】:

我正在使用BCP utility 导入.csv 文件。其中一列的值用逗号分隔,但用双引号括起来。 BCP 工具无法检测到它,并且错误地将数据上传到我的表中。

这是一个再现:

CREATE TABLE [dbo].[test_temptable]
(
    --[ID] [int] IDENTITY(1,1) NOT NULL,
    [Column1] [varchar](100) NULL,
    [Column2] [varchar](100) NULL,
    [Column3] [varchar](100) NULL,

    /*PRIMARY KEY CLUSTERED ([ID] ASC)
*/
) 
ON [PRIMARY]
GO

inputData.csv 文件中的测试数据:

value1,"test,test",value3

当我运行 bcp 命令时它可以工作

bcp "testDB.dbo.test_temptable" in  c:\temp\test\inputData.csv -c -t,  -T -S "testDBServer" -e c:\temp\test\error.csv

1 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 1      Average : (1000.00 rows per sec.)

但是表中的数据不正确:

Column2 应该是 test, test 和 column 3 value3

我做错了什么?任何指针?谢谢大家。

【问题讨论】:

    标签: sql sql-server bcp


    【解决方案1】:

    长话短说.. 它不适用于数据中的逗号和分隔符。即使 Excel 处理它,SQL BCP 也不是那么友好:

    sql server Bulk insert csv with data having comma

    过去我不得不这样做,您有一些选择:

    • 在 Excel 中打开 .csv 文件,将其另存为制表符分隔文件(使其成为 .txt),然后您可以运行此命令以表明您现在使用 tab 作为分隔符:

      bcp "testDB.dbo.test_temptable" in c:\temp\test\inputData.csv -c -t"\t" -T -S "testDBServer" -e c:\temp\test\error.csv

      当然,如果您的数据中有一个标签......同样的问题。但是,使用您提供的小示例 确实 工作。

    • 您可以尝试在 SQL 内部使用 BULK INSERT

    • 您可以考虑使用 SSISDTX,但老实说,我尽量避免额外的开销/复杂性。

    【讨论】:

    • 谢谢@sniperd。我的 DBA 不允许我们使用 BULK INSERT。我将探索使用制表符作为分隔符
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 2015-04-05
    • 2016-10-29
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多