回答

收藏

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

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

我正在尝试将军.csv大量数据转储到文件中SQL Server 2012年数据库。我没有做几千次。INSERT相反,它正在进行调查bcp。% q: X4 H) x8 a& y
编辑:    这是一个自动化的过程,而不是一次性的。BULK INSERT该数据库的权限。
# w. @$ D! u: ~) {当我试图将数据复制到数据库中时,bcp它不会返回任何错误,但它不会复制任何内容-它只会回到0 rowscopied。我把它减少到不能正常工作的最小情况。5 u# k! W% g5 z0 E0 U3 G' k  x
首先,创建一个包含两列的简单表:
. `: Y+ T, u3 ~: _: U6 r, |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还是这台机器没关系。
, L; W4 M! `8 u" y6 ^4 ?& w/ lbcp MyDB.dbo.mincase format nul -T -n -f mincasexml.fmt -x -S .\SQLEXPRESS现在创建一个data.csv该文件包括一行和两个条目,用制表符分隔。对我来说,这份文件只是:
" l0 |0 X" e  I) A, T7 w  esomecharacters  12345同样,这是一个制表符,而不是两个空间。是否有尾随换行符似乎并不重要。
& `* P, s) w* l( ^" d% D2 l现在,尝试bcp将数据插入到该格式文件中:
* Q. v. V  ]1 p/ k* @5 A/ gbcp MyDB.dbo.mincase in data.csv -f mincasexml.fmt -T -S .\SQLEXPRESS我得到的不是把数据复制到数据库中:
0 w( i. u0 U9 _  i" \Starting copy...0 rows copied.Network packet size (bytes): 4096Clock Time (ms.) Total     1有人知道这是怎么回事吗?
- Z+ I' b% d( ~3 o8 m% T- y- W7 n谢谢!
: Y0 A' b/ M9 {& u" U                                                                6 H& Q$ U4 Q. S8 {. n
    解决方案:                                                               
: o# Z1 O+ K) T                                                                该 BCP    命令通常需要指定标志符BCP文件格式模式。2 _' r& d+ d* q
-c指定字符(纯文本)模式4 m# d* {/ G& f3 `( @
-n指定纯模式
. e* z* u. c# q/ p- ~4 }) W-w指定unicode模式
在你的测试案例中,你创建的文件是纯文本文件,所以你应该在命令中  bcp    中指定 -c” 。
( d. z0 |! Z  \- U( \" ^bcp MyDB.dbo.mincase in data.csv -c -T -S .\SQLEXPRESSMicrosoft建议使用导入和导出
1 _8 T7 r/ g/ Q4 A( c; [* h$ A-n为避免列值中出现字段分隔符的问题(请参考字符模式和纯模式的最佳实践)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则