SQL Server BCP实用工具不正确的数据导入

时间:2018-09-17 17:19:54

标签: sql sql-server bcp

我正在使用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.)

但是表中的数据不正确:

enter image description here

第2列应该已经过 test,test 和第3列 value3

我在做什么错?有指针吗?谢谢大家

1 个答案:

答案 0 :(得分:1)

长话短说..它不适用于数据中的逗号和定界符。即使Excel可以处理,SQL BCP也不太友好:

sql server Bulk insert csv with data having comma

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

  • 在Excel中打开.csv文件,将其另存为制表符分隔的文件(这使其成为.txt),然后可以运行此文件以指示您现在正在使用{ {1}}作为分隔符:

    tab

    当然,如果您的数据中包含选项卡。但是,使用这个小例子,您提供了确实有效。

  • 您可以尝试在SQL内部使用bcp "testDB.dbo.test_temptable" in c:\temp\test\inputData.csv -c -t"\t" -T -S "testDBServer" -e c:\temp\test\error.csv

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