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

case...when...then...语句在存储过程中嵌套联合查询报错
SQL code
create proc GetReport
as
begin
insert into dbo.OneceShop(cid,Clayer,DistrictCode,DistrictName,createdate)
select a.cid,case a.Clayer  when '1' then '总代' 
            when '2' then '省代' 
            when '3' then '办事处' 
            when '4' then '区代' 
            when '5' then '一次店' 
            when '6' then '二次店' 
end,b.DistrictCode,b.DistrictName,getdate()
from dbo.TPUBCLIENTINFO a,TPubDistrict b where a.caddprovince=b.struccode order by DistrictName
end


简单的存储过程,就查两表数据,插入新表,其中有一个表的字段a.Clayer 我查出来如果是 1或者2或者3或者4。。。我想让他插入新表的时候直接转换判断。

1 就是 总代
2 就是 省代
3 就是 办事处
。。。

a.Clayer 为varchar(1)

存储过程创建可以,但执行报错

SQL code
消息 8152,级别 16,状态 14,过程 GetReport,第 4 行
将截断字符串或二进制数据。
语句已终止。



------解决方案--------------------
a.Clayer 为varchar(1) 长度明显不够啊

------解决方案--------------------
Clayer---varchar(1) is not enough to hold the data like "省代"
------解决方案--------------------
a.Clayer 为varchar(1)这个字段长度明显不够的
------解决方案--------------------
解决了就结贴拉》。。。。
------解决方案--------------------
这么多分 求人性化蹭点分。。。。
------解决方案--------------------
字段长度不够,所以报错,提示会被截断