日期:2014-05-16  浏览次数:20601 次

将截断字符串或二进制数据。语句已终止
可能对于高手来说这是个不是问题的问题,今天我写出解决这个问题的步骤,相信对于像我一样的菜鸟来说可以从中得出分析问题的方法。      

今天公司需要把大量的数据从一个表的某些字段导入到另一个表,这么简单的问题,我就用已经熟练的

insert into org_base(org_name) (select  org_name from contract),

结果系统提示:服务器: 消息 8152,级别 16,状态 9,行 1
将截断字符串或二进制数据。
语句已终止。

奇怪了,什么原因呢,语法不错呀,再试一次语法,选取前100行

insert into org_base(org_name) (select  top 100 org_name from contract),

系统提示:已影响行数100

明显的语法是正确的,是微软支持不到这么多数据(当时确实这么想了),不会吧,才3000多行的数据,

再试一次,insert into org_base(org_name) (select  top 500 org_name from contract),

同样的错误又出现了,可见不是微软支持问题,可能是数据有什么问题吧,于是

select  top 500 org_name from contract

好家伙,一个企业的名字是:

扬州四力体育用品有限公司/(上海四威实业公司江都文体分公司)(原:扬州四力体育用品厂/(上海四威实业公司江都文体分公司))

我设计新表时以为100个char已经够企业名字用的了, 这是什么企业名呀,肯定是这里的问题了,

把org_base字段的org_name改为200个char,然后 insert into org_base(org_name) (select  org_name from contract),系统提示:

(所影响的行数为 3093 行)

成功,但是回过头来看,原来的提示“将截断字符串或二进制数据”,呵呵说的就是字符过长呀,哎.......