a表:ashes_keepkeep_code   old_palce(类型varchar(50))
1           Null
2           6楼
3           Nullb表:temp2keep_code
2
3目的:更新a表中keep_code与b表keep_code相同的记录,在a表中的old_palce字段后加上字符串“ 2012登报”
代码如下:
update ashes_keep  
set old_palce=a.old_palce+' 2012年登报'
from ashes_keep a 
inner join temp2 b on a.keep_code=b.keep_code 出现错误信息:将截断字符串或二进制数据,不知为何?

解决方案 »

  1.   

    希望更新的结果如下:keep_code   old_palce(类型varchar(50))
    2           6楼 2012登报
    3            2012登报
     
      

  2.   

    是不是Null的时候+有异常,进行Null转换试下
      

  3.   

    改成这样吗? set old_palce=isnull(a.old_palce,'')+' 2012年登报'
      

  4.   

    截断说明你的长度不够,你自己查一下,你的varchar(50)类型,最多存储25个汉字
    如果有汉字的最好用nvarchar类型
    还有就是修改时,null+字符=null,这里要转换一下isnull(a.old_palce,'')+' 2012年登报'
    或者你确实是要填null就不用了
      

  5.   


    old_palce字段类型为varchar(50),软件已经使用许多年,不敢改数据库的字段类型,怕出意外!
    目前程序控制下字段存储的汉字即使加上' 2012年登报' 不会超过25个
    请指教,谢谢!
      

  6.   

    一个是你可以自己查询一下,汉字按两个字节算,字符按1个,这样加上你后来的后缀是否超过长度,
    另一个是你可以查一下这个表是否有update触发器,是否相应的操作了其他表而造成截断
      

  7.   

    自己搞定了,还是谢谢楼上的
    set old_palce=isnull(cast(a.old_palce as varchar(40)),'')+' 2012年登报'