回答

收藏

BCP不返回任何错误,但不复制任何行

技术问答 技术问答 154 人阅读 | 0 人回复 | 2023-09-13

我正在尝试将军.csv大量数据转储到文件中SQL Server 2012年数据库。我没有做几千次。INSERT相反,它正在进行调查bcp。
% N3 S+ P' y. |1 k1 e4 G编辑:    这是一个自动化的过程,而不是一次性的。BULK INSERT该数据库的权限。0 {8 W) m. ?/ s+ m
当我试图将数据复制到数据库中时,bcp它不会返回任何错误,但它不会复制任何内容-它只会回到0 rowscopied。我把它减少到不能正常工作的最小情况。
' Q8 N% v; x& {首先,创建一个包含两列的简单表:5 ^  P& ?4 w, o
CREATE TABLE [dbo].[mincase](    [key] [varchar](36) NOT NULL,   [number] [int] NOT NULL    PRIMARY KEY CLUSTERED   [key] ASC    )   WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON,FILLFACTOR = 40) ON [PRIMARY]) ON [PRIMARY]GO然后,使用bcp从中创建格式文件。请注意,这个例子创建了一个XML格式文件,但对它来说是XML还是这台机器没关系。
" s# ~8 ^: f6 ~& h( M1 m. rbcp MyDB.dbo.mincase format nul -T -n -f mincasexml.fmt -x -S .\SQLEXPRESS现在创建一个data.csv该文件包括一行和两个条目,用制表符分隔。对我来说,这份文件只是:
$ \* d4 [+ O1 F- V2 xsomecharacters  12345同样,这是一个制表符,而不是两个空间。是否有尾随换行符似乎并不重要。  ]) w' O/ ?7 B; }7 l
现在,尝试bcp将数据插入到该格式文件中:
) p/ q6 n+ {  r, }bcp MyDB.dbo.mincase in data.csv -f mincasexml.fmt -T -S .\SQLEXPRESS我得到的不是把数据复制到数据库中:9 |8 R. p: o) s& Q) x  ^: n# s9 J% F1 V9 c
Starting copy...0 rows copied.Network packet size (bytes): 4096Clock Time (ms.) Total     1有人知道这是怎么回事吗?
$ `% b& E, F, l3 O  T- @/ ]谢谢!7 f2 g9 \8 Y5 K/ P+ f& d% s. l7 f9 e
                                                               
( a# J0 W1 r' s) B    解决方案:                                                               
1 U. b  U; ?2 F                                                                该 BCP    命令通常需要指定标志符BCP文件格式模式。
& C) s( G' S' d-c指定字符(纯文本)模式
) n* A. Y; T# F$ |* t-n指定纯模式
* |/ R) @2 Z' X-w指定unicode模式
在你的测试案例中,你创建的文件是纯文本文件,所以你应该在命令中  bcp    中指定 -c” 。
. H4 r$ v! }) u, C% m) w) v$ Mbcp MyDB.dbo.mincase in data.csv -c -T -S .\SQLEXPRESSMicrosoft建议使用导入和导出2 x2 n) w4 I' s& H2 B1 W
-n为避免列值中出现字段分隔符的问题(请参考字符模式和纯模式的最佳实践)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则