Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server BCP实用程序数据导入不正确_Sql_Sql Server_Bcp - Fatal编程技术网

SQL Server BCP实用程序数据导入不正确

SQL Server BCP实用程序数据导入不正确,sql,sql-server,bcp,Sql,Sql Server,Bcp,我正在使用导入.csv文件。其中一列的值用逗号分隔,但它用双引号括起来。BCP工具无法检测到它,并且正在错误地将数据上载到我的表中 这是一份复印件: CREATE TABLE [dbo].[test_temptable] ( --[ID] [int] IDENTITY(1,1) NOT NULL, [Column1] [varchar](100) NULL, [Column2] [varchar](100) NULL, [Column3] [varchar](10

我正在使用导入
.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.)
但是,表中的数据不正确:

第2列应该是测试、测试和第3列值3


我做错了什么?有什么建议吗?谢谢大家

长话短说。。它不能在数据中使用逗号,也不能用作分隔符。即使Excel处理,SQL BCP也不那么友好:

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

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

    c:\temp\test\inputData.csv-c-t“\t”-t-S“testDBServer”-e c:\temp\test\error.csv中的bcp“testDB.dbo.test\u tentable”

    当然,如果您的数据中有一个选项卡。。同样的问题。但是,使用您提供的小示例,它确实有效

  • 您可以尝试从SQL内部使用
    bulkinsert

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

谢谢@sniperd。我的DBA不允许我们使用批量插入。我将探索使用制表符作为分隔符