SQL Server 中的case when then else 中的结果类型

--case后面是条件when后面是条件为什么,then后面结果,最后显示的是结果那一列,如
select
case id when '3' then 'one' ELSE id end
from @T
并且一定要有 end 或者是else 什么 end

declare @T Table (id char(10))
insert into @T select '1'
insert into @T select '2'
insert into @T select '3'

select * from @T
--@T为表变量

----开始测试
--select
-- case id
--  when '3' then cast('' as char(10))
--  else id
-- end as Id,
--    SQL_VARIANT_PROPERTY((case id
--  when '3' then cast('' as char(10))
--  else id
-- end ),'BaseType') as CaseResultType,
-- case id when '3' then DataLength(cast('' as char(10))) else DataLength(id) end as IDDataLength
--from @T
----显示指定结果为char类型,长度为10,可以看到case后的result类型为char,没有变化。

--select
-- case id
--  when '3' then '' else id end as ID,
-- SQL_VARIANT_PROPERTY((case id when '3' then '' else id end),'BaseType') as CaseResultType,
-- case id when '3' then DataLength('') else DataLength(id) end as IDDataLength
--from @T
----不显示指定类型,那么'' 为varchar型,case的result类型优先级varchar由于char,结果显示result类型为varchar

 select
 case id
  when '3' then 4 else id end as ID,
 SQL_VARIANT_PROPERTY((case id when '3' then 4 else id end),'BaseType') as CaseResultType,
 case id when '3' then DataLength(4) else DataLength(id) end as IDDataLength
from @T
--显示的结果可以看出,case的result类型为int型,但存储大小不全为4

 

代码可以直接运行,在sql server 2005 express版里面

posted @ 2011-10-12 10:00  凌寒独自开  阅读(766)  评论(0编辑  收藏  举报