日期:2014-05-17  浏览次数:20488 次

UPDAT问题
表里有列CODE,VARCHAR(10)
现我想在这列的值后面加一个'_'
code
001
002

code
001_
002_

用update TB1 set code=left(code+'_',10)
出现:
Server: Msg 8152, Level 16, State 9, Line 6
String or binary data would be truncated.
The statement has been terminated.
请教!

------解决方案--------------------
update TB1 
  set code=rtrim(code)+'_'

------解决方案--------------------
表的的code列长度应该没有varchar(10)请你确认一下.如果长度为10应该不会有字符串超过的报错.
------解决方案--------------------
update TB1 
set code=ltrim(code)+'_'
------解决方案--------------------
update TB1 set code=case when len(code)>=10 then code else ltrim(rtrim(code))+'_' end
------解决方案--------------------
执行以下语句,查看是否有超长的数据.

select CODE,datalength(left(CODE+'_',10))
 from TB1 
 where datalength(left(CODE+'_',10))>10
    or len(left(CODE+'_',10))>10

------解决方案--------------------
如果原来已经有10位,那么再加"_"就变成11位,应该这样

--查询
select * from TB1 where len(code) in(select max(len(code)) from tb1)
--看看最大长度是多少?



--更新
update TB1 
set code=ltrim(rtrim(code))+'_'
where len(code)<10