SQL SERVER ltrim+rtrim,或者replace函数不能去掉的空格

0
截图里面的数据均来自对今天刚导入的数据
借用以前的包来循环导入txt数据,检查了导入前的txt文本,特意找到这个编码,核对这条记录的店铺名,前面没有空格
 
今天导入与前期导入有一点不同的地方:数据表中增加了1列(alter增加列与原‘店铺名’字段无关),
为了方便,将就在SSIS包里把平面文件源重新选中,重置列后重新区分,然后重新连接对应了数据库表。
连接管理器没有删除新建。导入成功,不过有提示:文本结尾存在不完整行,我看了下,除开标题行,数据行数也没丢。
后来在使用导入的数据过程中,发现以下问题.......怎么弄都不行
 
 
没办法,把包删掉,重建执行包循环执行导入后,再次运行截图中的语句,问题解决了。
虽然问题解决了,但是疑惑依旧,希望有同样经历,或者已经知道缘由的大神们,帮个忙。留个言告诉我下为啥?
 
总结一下:
1:由原包执行导入的数据字段,字段前增加了空格,且ltrim,replace函数不能剔除
曾把查询结果复制到excel里,可用' '空格去替换,但在sql server里面却不可以
疑问:这是实际问题,到底是不是空格?(这里姑且先给它定义为空格,方便后面称呼)
2:空格在txt数据源端,用excel检查过,没有空格,且后来重建包执行的是同一批txt数据源(可以判断源端没有问题)
3:原有执行包虽然增加了字段,但是是‘库存数量’,与多出空格的‘店铺名’字段无关,虽然是有重置列,但没有理由包在执行过程中自动添加空格(因为有提示‘文本结尾存在不完整行’,而实际上这一批数据好像都有问题,虽然没有直接报错终止,但问题可能出现在这里)
4:删掉原来包后,新建foreach循环-数据流-平面文件源-OLE DB目标,新建文件枚举参数后,重新执行导入txt数据400W行,OK(从解决的步骤中,只能看出第3步,可能有问题,但不知实际原因)

我把解决后的图贴上,方便大家查看。如图
很奇怪,求解,非常感谢!
11.png


11.png
已邀请:
0

gogodiy - 天善智能数据库专家、Tableau爱好者 2015-11-09 回答

一个是先判断下全角、半角空格。
另一个是随机找一条店铺名,用ascii(substring(店铺名,1,1))的方式看下对应的asc码来确认下第一个位置究竟是什么内容。
0

- 取是能力,舍是境界 2015-11-08 回答

这个像空格的字符有可能是某个不可见的字符,你用ascii函数看一下这一位的Ascii码值是不是空格。

要回复问题请先登录注册