SQL 服务器 BCP 实用程序不正确的数据导入

SQL Server BCP Utility incorrect data import

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

这是一个重现:

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.)

然而 table 中的数据不正确:

Column2 应该是 test,test 和 column 3 value3

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

长话短说.. 它不适用于数据中的逗号和分隔符。即使 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,但老实说,我尽量避免使用额外的 overhead/complexity。