数据库设计表字段长度的问题

2
学习了SSIS后,操作数据库中遇到一个设计表字段长度的问题
举例描述如下:
举例字段:国际条码13位,一般不超过13位
1:在设计 “条形码” 字段的时候,因为知道通用的准则不会超过13位,所以设计为varchar(13)
2:但是在执行包导入“条形码”时,往往报错 数据转换失败
3:在重新设计“条形码”字段长度为varchar(15)后,执行包成功
4:在执行成功后,从数据库中提取最长条形码占位字符数,是13。
问题:为什么表字段设计为13位,理论已经满足需求,但是实际操作会失败,把字段增长为15位时,实操成功。
求助:表字段设计 理论长度和实际长度的差异在哪?因为在设计其他字段也遇到理论可行,实际不行的时候,故挑一个典型提问,还请协助解答,方便将来设计数据库表时进行避免错误操作,非常感谢!
补充:在操作过程中,数据源中的“条形码”字段中没有空白字符,在测试之前已经替换掉了(替换的是半角空白,全角空白没测试。)
猜测:按理说数据源中的空白字段就算导入到数据库中,max+len函数也应该可以取到空白字符的长度。
截图顺序如下

设计数据库13位.png


映射条形码13位.png


条形码错误1.png


条形码错误2.png


条形码修改15位.png


成功1.png


成功2.png


验证与疑问.png

 
 
已邀请:
3

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2015-10-22 回答

非常详细的描述,非常详细的问题和思考方式,赞!

SSIS 里面有一个探查 Profiler 查看数据源数据质量的东西,也可以用来看看数据源字段长度范围,你也可以看看(SSIS 课程中你自己找一下有一章讲解这个)。

如果已经明确国际条形码一定是13位的话,现在报错你的处理方式可以是通过 ERROR_OUTPUT 将错误的数据输出到指定文件进行手工检查和验证(课程已详细讲解操作方式,可以看看)。

验证的时候你可能会发现看上去输出的结果也没有问题,把鼠标放上去全部选中看看高亮的地方这个字符串是否还有空白?

看看这个例子你是不是就明白了?
2015-10-22_172051.jpg

是不是有可能你数据的清洗方式有漏洞,在处理转换的时候应该考虑去掉空白的问题。

如果不是这个空白问题造成的,就应该 ERROR OUTPUT 认真检查一下数据源错误数据看看差异来源于哪里?
0

箕山小道 - 箕山小道 2016-03-23 回答

经过半年的时间,再一次遇到这样的问题,终于搞明白具体原因是。
这次问题的原因是数据源结尾多包含了4个制表符,用ASCII去取值得到了四个9。
 
问题原因:
1:在前期设计导入字段,只有4个。
2:由于后期再不知情的情况下,给到的数据源字段在原有的基础上,后面增加了4个字段(空有字段,没有任何内容)
3:但是导入的时候,还按照前期规则,只取前面4个,则后期增加的4个字段,均有一个制表符(tab键)。
4:所以在前期字段的最后一个字段上多了4个制表符。
例如:前期字段有   商品编码,生效日期,结束日期,生效门店   4个字段
后期字段有 商品编码,生效日期,结束日期,生效门店,销售数量,销售金额,销售净额,毛利 8个字段
虽然后4个字段没有内容,但是有制表符占位。且4个制表符占位统一赋值给了第四个字段‘生效门店’,所以在做字段关联的时候,失败。
0

天桥下的郑成功 - Hadoop大数据开发工程师、数仓架构师、熟悉数据仓库设计、Hadoop、Spark、HBase、Hive、SSIS等开发 2016-03-24 回答

建议你从文本文件里取出来的时候在代码里 Trim一下,这样保证前后无空格
还有就是实在考虑不到哪里出的问题,在 控件的ErrorOutput那 把错误的输出出来。然后 弄个 监控数据,运行并监视 把输出的东西拷贝出来看看到底是哪里出的问题

要回复问题请先登录注册