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
- 您可以考虑使用
SSIS
或 DTX
,但老实说,我尽量避免使用额外的 overhead/complexity。
我正在使用 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
中使用 - 您可以考虑使用
SSIS
或DTX
,但老实说,我尽量避免使用额外的 overhead/complexity。
BULK INSERT