大容量复制实用工具正在忽略源CSV文件中的第一个数据行

llmtgqce  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(138)

在试图弄清楚批量复制实用程序的工作原理以便将其应用于大型数据集时,我发现了一个问题-第一行数据没有加载到数据库表中。
DDL:

use sandbox;

drop table dbo.people;

create table dbo.people
( 
  PersonID smallint NOT NULL,
  FullName varchar(60) NOT NULL,
  PerformanceRating varchar(1) NOT NULL
);

PeopleTableFormat.xml:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR=",&quot;" MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="&quot;," MAX_LENGTH="60" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="FullName" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="3" NAME="PerformanceRating" xsi:type="SQLVARYCHAR"/>
 </ROW>
</BCPFORMAT>

LoadPeopleDataFromCsvFile.sh:

#!/bin/bash
bcp dbo.people in ./data.csv -S MyServerName -E -d sandbox -T -c -t "," -F 1 -e errors.csv -f ./PeopleTableFormat.xml

data.csv:

PersonID,FullName,PerformanceRating
107,"Brown, George",A
128,"White, Amanda",B
133,"Green, Greg",B

数据加载过程由Git Bash调用shell脚本触发,终端输出如下:

下面是加载的数据的屏幕截图:

以下是. csv包含的错误:

这个错误信息没有帮助。为什么没有加载第一行数据?

lsmepo6l

lsmepo6l1#

要更正未导入第一个数据行的问题,必须更新data.csv中的列标题行,以匹配XML格式化文件中指定的终止符:

PersonID,"FullName",PerformanceRating

要更正2个控制台错误,必须将www.example.com中为-F开关提供的参数LoadPeopleDataFromCsvFile.sh更改为导入从CSV文件第2行开始的数据,并且必须删除-c开关:

bcp dbo.people in ./data.csv -S MyServerName -E -d sandbox -T -t "," -F 2 -e errors.csv -f ./PeopleTableFormat.xml

相关问题