2011-10-04 40 views
2

在输出日志输出失败之前,我得到了大约10次的错误Error - [Microsoft][SQL Native Client] String data, right truncation。该错误与其相关的字段有点模糊。通常情况下,如果数据集真正处于第三范式,这不会成为问题。但是,该数据集具有超过125个字段,超过100,000条记录作为制表符分隔的txt文件。在这种情况下,找到有问题的数据将是一项相当艰巨的任务。 如何判断SQL 2k5 BCP在导入失败时抱怨哪个字段?如果我能找出哪个字段出错了,这将大大有助于缩小问题的范围。如何判断SQL 2k5 BCP在导入失败时抱怨哪个字段?

bcp db.dbo.table in "dataset.txt" -f "fmt.table.txt" -S instancename -U user -P password -o log.txt 

是的,这是一个更大的故事,但为了简单起见,我对这个特定问题进行了限制。否则,进一步需要提出另一个问题。 :)

+0

这取决于数据,定界表和命令运行。 您可以将bcp命令添加到问题中吗?你在使用格式文件吗? 它是一个字符串列。查看更宽的列的数据。它是否在第一行(任何标题之后)失败?查找表格中最短的列宽。 批量复制在失败之前会忽略前10个错误,因此它可能会影响更多的行。 –

+0

所以我必须打开范围问题。这些是系统生成的(一个AIX财务处理系统)脚本和数据文件,将被加载到SQL Server中。它通过一系列T-SQL脚本提供了所有的创建表,约束和键。数据文件不包含标题,但包含格式文件。它还提供了所有BCP命令来复制数据库中的信息。更大的问题是应该无缝工作,但没有。 “dataset.txt”中的bcp db.dbo.table -f“fmt.table.txt”-S instancename -U用户-P密码-o log.txt' –

+0

很多信息都在格式文件中。请粘贴文件和数据样本(只有几行,散列出任何敏感数据)。 –

回答

1

将空归类添加到格式文件。即

112 SQLCHAR 0 1 "\t" 112 CREDITREPORTADDRINDICATOR "" 

我导入行之间没有任何内容的文件以获得null。 确保包含连续的选项卡。

0

在第112个字段中发现问题,其中字段被定义为char(1),并且提取的数据字面意思是“”,每个记录的长度都是2。我通过将数据作为制表符分隔文件导入到Excel中,将每个字段设置为文本(至关重要,因为Excel会自动将日期字段转换为数值),并将文本限定符从“设置为无”(另一个Excel转换功能)和将其设置为图纸1.我使用=len(Sheet1!A1),=len(Sheet1!A2),=len(Sheet1!A3)等(感谢上帝的自动填充)检查第二张数据集中每个数据的字段长度,并在第三张纸上粘贴shema信息以比较最大长度每个字段的=max(Sheet2!A1:A126324)。基地问题在于提取数据的方式。

我这是怎么做到的,但我感觉这绝不是这样做的一个很好的方式....