bcp:错误= [Microsoft] [SQL Server Native Client 10.0]字符串数据,右截断
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bcp:错误= [Microsoft] [SQL Server Native Client 10.0]字符串数据,右截断相关的知识,希望对你有一定的参考价值。
我最近在使用bcp时遇到错误。这是错误。
SQLState = 22001,NativeError = 0错误= [Microsoft] [SQL Server Native Client 10.0]字符串数据,右截断
我正在尝试将数据解压缩到没有任何约束的临时表中,并且与数据相比,数据类型也相当大。我有来自不同表的大约11个文件被bcp'd和压缩出来,当解包错误时只有一个文件。这是我一直在成功使用的命令。最近(当试图制作当前WH的副本并设置过程时)我一直面临着问题。
employee_details.dat中的bcp.exe employee_details -n -E -S“servername”-U sa -P“密码”
我已经尝试将命令更改为-C -T -S,当我手动给出格式时,它可以工作。这是一个非常重要的数据包,我需要加载到我的WH。 我不知道我是否在这里看到格式文件。需要任何帮助。
谢谢
肉桂的女孩。
我们在执行BCP时也遇到了同样的问题,结果证明是.dat文件中的新行字符存在问题。
在Notepad ++中查看该文件,然后单击“显示所有字符”以查看新行字符。
BCP使用-r“ r n”选项抛出跟随错误,即使用以下命令
bcp dbo.Test in C:Test.dat -c -t "|" -r "
" -S "DBServerName" -T -E
“SQLState = 22001,NativeError = 0错误= [Microsoft] [SQL Server Native Client 10.0]字符串数据,右截断”
BCP使用-r“ n”或-r“ r”选项将文件中的所有行视为单行,即使用以下命令
bcp dbo.Test in C:Test.dat -c -t "|" -r "
" -S "DBServerName" -T -E
当我们在BCP命令中使用Haxadecimal值(0x0a)作为新行字符时,问题得以解决
bcp dbo.Test in C:Test.dat -c -t "|" -r "0x0a" -S "DBServerName" -T -E
对我们来说,事实证明我们尝试上传的文件是Unicode而不是ANSI格式。
有一个-N开关,但我们的表没有任何NVARCHAR数据。
我们刚刚以ANSI格式保存文件并且它有效,但如果您有NVARCHAR数据或者您可能需要使用-N开关
见TechNet - Using Unicode Native Format to Import or Export Data
当有太多数据可以装入单个列时,会发生bcp右截断错误。这可能是由不正确的格式文件(如果使用的话)或分隔符引起的。行终止符(Windows有CRLF或' r n',UNIX有' n')也可能导致此错误。示例您的格式文件包含Windows CRLF,即' r n'作为行终止符,但文件包含' n'作为行结尾。这意味着将整个文件拟合为1行(而不是1列),这会导致右截断错误。
我也收到截断消息。经过几个小时的搜索论坛和尝试建议的解决方案,我终于得到了我的工作量。
截断消息的原因是因为我很容易认为将列名放在格式文件中实际上很重要。它是前面的数字,表示数据加载的位置。
我的输入文件没有表中第三列的数据。这就是我的格式文件的样子。
... "," 1 Cust_Name SQL_Latin1...
... "," 2 Cust_Ref SQL_Latin1...
... "," 3 Cust_Amount SQL_Latin1...
... "
" 4 Cust_notes SQL_Latin1...
我的输入文件如下所示:
Jones,ABC123,200.67,New phone
Smith,XYZ564,10.23,New SIM
桌子看起来像
Cust_Name Varchar(20)
Cust_Ref Varchar(10)
Cust_Type Varchar(3)
Cust_amount Decimal(10,2)
Cust_Notes Varchar (50)
Cust_Tel Varchar(15)
Cust......
我假设通过在格式文件中给出列名称,数据将进入表中的相应列。
然而,这可用,因为列号很重要,列名称是噪音。
... "," 1 A SQL_Latin1...
... "," 2 B SQL_Latin1...
... "," 4 C SQL_Latin1...
... "
" 5 D SQL_Latin1...
在我的情况下,原因是在一个领域有写"|" = chr$(124)
和分隔符在我的情况下"|" = chr$(179)
。
MS SQL在两个字符之间没有区别。我淘汰了chr$(124)
然后BCP导入工作正常。
在notepad ++中打开文件。转到查看选项卡 - >显示符号 - >显示所有字符。我在.tsv文件中也遇到了同样的问题。一个标签错了。
我知道这是旧的 - 但我刚遇到一个实例,我收到此错误,结果我的一个数字字段有更多的小数,这是架构允许的。
迟到了,但仍然:在我的情况下,我确实得到了这一个
SQLState = 22001, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]String data, right truncation
问题是架构发生了变化。目标数据库有两个新字段。安装完先前的架构后,导入成功。
花了4个小时,做了大量的跟踪和错误,我发现解决方案可以像导入数据的表一样简单,应该为您尝试导入的文件设置合适的模式。例如:在我的情况下。我正在将带有667,aaa,bbb的.csv导入到一个表中,该表具有int(4),char(2),char(2)的模式,导致String Data,Right Truncation。
以上是关于bcp:错误= [Microsoft] [SQL Server Native Client 10.0]字符串数据,右截断的主要内容,如果未能解决你的问题,请参考以下文章
错误= [Microsoft] [SQL Server的ODBC驱动程序13]无法打开BCP主机数据文件
将数据批量加载到使用 BCP 从 SQL Server 导出的 Snowflake 时出现 UTF-8 错误