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

select出来最后面的0总是被清掉,;号还在,求大神帮忙看一下

declare
@sc_no varchar(20),
@cus_noname varchar(40),
@mem_no varchar(30),
@pass_sl varchar(10)
declare c cursor for select * from #t
open c
fetch  from c into @sc_no,@cus_noname, @mem_no, @pass_sl
while(@@fetch_status = 0)
begin
update #viobill_D set sc=cast(ltrim(rtrim(sc)) as varchar)
+cast(@sc_no as varchar)+' '+ cast(@cus_noname as varchar) +' '
+cast(left(@pass_sl,charindex('.',pass_sl)-1) as varchar)+' ;'
where mem_no = @mem_no
fetch next from c into @sc_no,@cus_noname, @mem_no, @pass_sl
end;
close c
deallocate c

select * from #viobill_D
order by sc_no,mem_no

------解决方案--------------------
varchar  要定义长度,否则默认为varchar(1)
------解决方案--------------------

declare @sc_no?varchar(20),
????@cus_noname?varchar(40),
????@mem_no?varchar(30),
????@pass_sl?varchar(10)
declare?c?cursor?for?select?*?from?#t
????open?c
????fetch??from?c?into?@sc_no,@cus_noname,?@mem_no,?@pass_sl
????while(@@fetch_status?=?0)
????begin
????????update?#viobill_D?set?sc=ltrim(rtrim(sc))
????????????+ltrim(@sc_no)+'?'+?ltrim(@cus_noname)?+'?'
????????????+left(ltrim(@pass_sl),charindex('.',pass_sl)-1))+'?;'
????????where?mem_no?=?@mem_no
????????fetch?next?from?c?into?@sc_no,@cus_noname,?@mem_no,?@pass_sl
????end;
????close?c
????deallocate?c
?
select?*?from?#viobill_D
order?by?sc_no,mem_no

这样试试...
------解决方案--------------------
cast(@sc_no as varchar(20))