【发布时间】:2014-01-08 02:31:39
【问题描述】:
我正在使用 BCP 将行导入 SQL 服务器。当我意识到 BCP 不是随机导入所有行时,一切似乎都运行良好。一些数据被跳过(有时是 50%)。 BCP 过程没有返回任何错误。它说成功复制了 X 行。
BCP 命令和输出:
bcp MyTable IN MyTable_final.dat -f MyTable.Fmt -S <ServerIP> -U <User> -P <Pwd> -F2
输出:
Starting copy...
6 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 63 Average : (95.24 rows per sec.)
表的 SQLSERVER 架构:
CREATE TABLE MyTable (
Type varchar(255) default NULL,
Date varchar(255) default NULL,
ID varchar(255) default NULL,
VID varchar(255) default NULL,
VName varchar(255) default NULL,
LDate varchar(225) default NULL,
id BIGINT IDENTITY(1,1) NOT NULL,
PRIMARY KEY (id) ,
CONSTRAINT d_v UNIQUE (VID, VName)
) ;
正在使用的 BCP 格式文件:
11.0
7
1 SQLCHAR 0 255 "|" 1 Type SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 255 "|" 2 Date SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 255 "|" 3 ID SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 255 "|" 4 VID SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 255 "|" 5 VName SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 225 "|" 6 LDate SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 21 "\r\n" 7 id ""
实际数据集:您可以看到文件中当前有 13 行。但是,在我的例子中,只有 6 行是随机导入的,没有任何错误的痕迹。
我无法弄清楚发生了什么。任何指针来捕获丢失的行并防止它?
【问题讨论】:
-
用notepad++打开你的文件,检查你的行终止符设置是否正确。
-
我一直在导入和导出 30 GB 的数据,但我从来没有遇到过问题
-
我认为我发现标识列存在问题。我重新创建了没有主键 ID 的表,瞧,BCP 正在正确复制所有行。数据集不包含 Identity 列,但表中有它(ID BigINT,主键)。我需要对格式文件进行哪些更改才能使其正常工作?
-
@Backtrack 即使我被难住了。过去几个月我经常使用它(当然在不同的数据集上),但这从未发生过。
-
好的,我发现了错误...创建一个没有 ID 的视图,它可以工作 \
标签: sql sql-server bcp identity-column